PostgreSQL - JOINS
こんにちは、データベースの熱心な志願者さんたち!今日は、PostgreSQLのJOINの世界に興味深い旅を楽しむことになります。あなたの近所の親切なコンピュータの先生として、私はこの冒険をステップバイステップで案内します。心配しないでください。これまでにコードを一行も書いたことがない人でも大丈夫です。私たちは非常に基本的なところから始めて、少しずつ進んでいきます。では、仮想のヘルメットをかぶり、一緒に飛び込みましょう!
JOINとは?
さまざまなJOINの種類に飛び込む前に、JOINが実際に何であるかを理解しましょう。大きなパーティを計画しているとします(だって、誰だってデータベースのパーティが好きですよね?)。友達の名前のリストと、彼らのお気に入りの飲み物のリストの二つがあります。JOINは、魔法のパーティプランナーのように、これらのリストをさまざまな方法で組み合わせて、完璧なゲストリストを作成するお手伝いをします。
データベースの言葉では、JOINは関連する列に基づいて、2つ以上のテーブルの行を結合することができます。では、PostgreSQLが私たちに提供するさまざまなJOINの種類を探ってみましょう。
CROSS JOIN
CROSS JOINとは?
CROSS JOINは、飲み物の好みを知らないにしても、リストの両方のすべての人をパーティに招待することです。最初のテーブルのすべての行を、2番目のテーブルのすべての行と結合します。
CROSS JOINの例
以下に簡単なテーブルを作成してみましょう:
CREATE TABLE friends (
id SERIAL PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE drinks (
id SERIAL PRIMARY KEY,
drink VARCHAR(50)
);
INSERT INTO friends (name) VALUES ('Alice'), ('Bob'), ('Charlie');
INSERT INTO drinks (drink) VALUES ('Cola'), ('Juice'), ('Water');
次に、CROSS JOINを実行します:
SELECT f.name, d.drink
FROM friends f
CROSS JOIN drinks d;
結果:
name | drink |
---|---|
Alice | Cola |
Alice | Juice |
Alice | Water |
Bob | Cola |
Bob | Juice |
Bob | Water |
Charlie | Cola |
Charlie | Juice |
Charlie | Water |
ご覧の通り、すべての友達がすべての飲み物とペアされます。まるで「みんな、すべての飲み物を試してみよう!」と言っているみたいです。これは必ずしも実用的ではありませんが、すべての可能な組み合わせを生成するのに非常に良い方法です。
INNER JOIN
INNER JOINとは?
INNER JOINはもっと選択的です。友達を彼らのお気に入りの飲み物と一致させますが、飲み物の好みがわかっている友達に限定されます。
INNER JOINの例
テーブルを少し修正してみましょう:
CREATE TABLE friends (
id SERIAL PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE favorite_drinks (
id SERIAL PRIMARY KEY,
friend_id INTEGER,
drink VARCHAR(50)
);
INSERT INTO friends (name) VALUES ('Alice'), ('Bob'), ('Charlie'), ('David');
INSERT INTO favorite_drinks (friend_id, drink) VALUES (1, 'Cola'), (2, 'Juice'), (3, 'Water');
次に、INNER JOINを実行します:
SELECT f.name, fd.drink
FROM friends f
INNER JOIN favorite_drinks fd ON f.id = fd.friend_id;
結果:
name | drink |
---|---|
Alice | Cola |
Bob | Juice |
Charlie | Water |
Davidが結果に表示されないことに注意してください。彼はお気に入りの飲み物がリストにないからです。
LEFT OUTER JOIN
LEFT OUTER JOINとは?
LEFT OUTER JOINは、すべての友達がゲストリストに載るようにするものです。飲み物の好みがわかっていない人も含まれますが、デフォルトの飲み物か、飲み物なしになります。
LEFT OUTER JOINの例
INNER JOINの例と同じテーブルを使用します:
SELECT f.name, fd.drink
FROM friends f
LEFT OUTER JOIN favorite_drinks fd ON f.id = fd.friend_id;
結果:
name | drink |
---|---|
Alice | Cola |
Bob | Juice |
Charlie | Water |
David | NULL |
Davidが含まれているのに注意してくださいが、飲み物はNULLです。これがLEFT OUTER JOINの魔法です!
RIGHT OUTER JOIN
RIGHT OUTER JOINとは?
RIGHT OUTER JOINはLEFT OUTER JOINの逆です。すべての飲み物がメニューに載るようにし、誰も選んでいない飲み物も含めます。
RIGHT OUTER JOINの例
飲み物が誰も選んでいない新しい飲み物を追加してみましょう:
INSERT INTO favorite_drinks (drink) VALUES ('Lemonade');
SELECT f.name, fd.drink
FROM friends f
RIGHT OUTER JOIN favorite_drinks fd ON f.id = fd.friend_id;
結果:
name | drink |
---|---|
Alice | Cola |
Bob | Juice |
Charlie | Water |
NULL | Lemonade |
Lemonadeがリストに表示されていますが、誰もそれを好みとして選んでいません。
FULL OUTER JOIN
FULL OUTER JOINとは?
FULL OUTER JOINはパーティプランナーの夢です。すべての友達とすべての飲み物を含め、可能な場所では一致させ、一致しない場所ではNULLを使用します。
FULL OUTER JOINの例
SELECT f.name, fd.drink
FROM friends f
FULL OUTER JOIN favorite_drinks fd ON f.id = fd.friend_id;
結果:
name | drink |
---|---|
Alice | Cola |
Bob | Juice |
Charlie | Water |
David | NULL |
NULL | Lemonade |
これで完全な情報が得られます。すべての友達(Davidのように好みの飲み物がない人も)とすべての飲み物(友達が選んでいないLemonadeも)が含まれます。
結論
そして、みんな!私たちはPostgreSQLのJOINの世界を旅しました。全て包容するCROSS JOINから、包括的なFULL OUTER JOINまで、さまざまなJOINを選ぶのはまるでパーティの完璧なミックスを探すようなものです。情報をどのように組み合わせたいか、どのようにデータを結合したいかによって異なります。
これらのJOINを練習し、さまざまなシナリオを試してみてください。そうすれば、データベースパーティの中心人物になるでしょう!データ管理がこんなに楽しいとは思わなかったでしょうね?次回まで、お楽しみに!ハッピークエリ!
JOINの種類 | 説明 |
---|---|
CROSS JOIN | 最初のテーブルのすべての行を、2番目のテーブルのすべての行と結合 |
INNER JOIN | 両方のテーブルに一致がある場合にのみ行を返す |
LEFT OUTER JOIN | 左側のテーブルのすべての行と右側のテーブルの一致した行を返す |
RIGHT OUTER JOIN | 右側のテーブルのすべての行と左側のテーブルの一致した行を返す |
FULL OUTER JOIN | いずれかのテーブルに一致がある場合にのみ行を返す |
Credits: Image by storyset