SQL - 左結合と右結合の違い:初学者向けの包括ガイド
こんにちは、SQLに興味を持つ皆さん!データベースの世界を探索するこのエキサイティングな旅であなたのガイドを務めることができて嬉しいです。私がコンピュータサイエンスを教えてきた年月の中で、結合をマスターすることはデータベースの領域でスーパーパワーを解き放つようなものだと確信しています。それでは、左結合と右結合の謎を一緒に解き明かしましょう!
結合の理解:基本編
左結合と右結合の詳細に踏み込む前に、まずSQLでの結合とは何かを簡単に復習しましょう。パーティを計画しているとします。ゲストの名前とお気に入りの飲み物のリストが2つあります。結合は、これらのリストをさまざまな方法で組み合わせて必要な情報を得るための魔法の杖のようなものです。
左結合の動作
左結合とは?
左結合は、ゲストリストに記載されたすべての人をパーティに招待し、彼らのお気に入りの飲み物を知っているかどうかに関係なく行います。左表(クエリで最初に挙げるテーブル)のすべての記録と右表の一致する記録を返します。
左結合の構文
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;
左結合の例
これを説明するために、2つの簡単なテーブルを作成しましょう:
CREATE TABLE Guests (
GuestID INT PRIMARY KEY,
GuestName VARCHAR(50)
);
CREATE TABLE Drinks (
DrinkID INT PRIMARY KEY,
GuestID INT,
FavoriteDrink VARCHAR(50)
);
INSERT INTO Guests (GuestID, GuestName) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie'),
(4, 'David');
INSERT INTO Drinks (DrinkID, GuestID, FavoriteDrink) VALUES
(1, 1, 'Mojito'),
(2, 2, 'Beer'),
(3, 3, 'Wine');
そして、左結合を使用して、すべてのゲストとそのお気に入りの飲み物(知っている場合)を取得します:
SELECT Guests.GuestName, Drinks.FavoriteDrink
FROM Guests
LEFT JOIN Drinks ON Guests.GuestID = Drinks.GuestID;
結果:
GuestName | FavoriteDrink |
---|---|
Alice | Mojito |
Bob | Beer |
Charlie | Wine |
David | NULL |
Davidが結果に表示されるのを見てください。彼のお気に入りの飲み物は知られていないにも関わらず、これが左結合の魔法です!
右結合の動作
右結合とは?
右結合は、飲み物リストに焦点を当て、どのゲストがどの飲み物を好むかを確認するようなものです。右表のすべての記録と左表の一致する記録を返します。
右結合の構文
SELECT column_name(s)
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;
右結合の例
前のテーブルを使用して、右結合を行います:
SELECT Guests.GuestName, Drinks.FavoriteDrink
FROM Guests
RIGHT JOIN Drinks ON Guests.GuestID = Drinks.GuestID;
結果:
GuestName | FavoriteDrink |
---|---|
Alice | Mojito |
Bob | Beer |
Charlie | Wine |
Davidがこの結果に表示されないのを見てください。彼にはお気に入りの飲み物がリストアップされていないためです。
左結合と右結合の比較
今までの両方の結合を見てきましたので、並べて比較してみましょう:
要素 | 左結合 | 右結合 |
---|---|---|
焦点 | 左表(最初)のすべての記録 | 右表(二番目)のすべての記録 |
NULL値 | 右表の列に非一致時 | 左表の列に非一致時 |
使用ケース | メイン表からすべての記録を取得したい場合 | 結合表からすべての記録を取得したい場合 |
結果セットのサイズ | 常に左表のすべての記録を含む | 常に右表のすべての記録を含む |
左結合と右結合の使用時期
- 左結合を使用する場合:
- メイン(左)表のすべての記録を保持したい場合
- 右表の不一致記録に対してNULL値を許容する場合
- 右結合を使用する場合:
- サブ(右)表のすべての記録を保持したい場合
- 左表の不一致記録に対してNULL値を許容する場合
プロティップ
私が教えてきた年月の中で、多くの開発者が左結合を右結合よりも好むことに気づきました。なぜなら、左結合は読みやすく、理解しやすいからです。右結合を左結合として書き換えることもできます。右結合が混乱する場合は、左結合に切换しても構いません!
実践的な練習
理解を固めるために、楽しい練習をしましょう。ブッククラブを組織するとします。2つのテーブルがあります:Members
とBooks
。
CREATE TABLE Members (
MemberID INT PRIMARY KEY,
MemberName VARCHAR(50)
);
CREATE TABLE Books (
BookID INT PRIMARY KEY,
MemberID INT,
BookTitle VARCHAR(100)
);
INSERT INTO Members (MemberID, MemberName) VALUES
(1, 'Emma'),
(2, 'James'),
(3, 'Sophia'),
(4, 'Oliver');
INSERT INTO Books (BookID, MemberID, BookTitle) VALUES
(1, 1, 'Pride and Prejudice'),
(2, 2, '1984'),
(3, 2, 'To Kill a Mockingbird'),
(4, 3, 'The Great Gatsby');
以下のクエリを試してみてください:
- 左結合を使用して、すべてのメンバーとその本(場合によっては)を取得します:
SELECT Members.MemberName, Books.BookTitle
FROM Members
LEFT JOIN Books ON Members.MemberID = Books.MemberID;
- 右結合を使用して、すべての本とその所有者(場合によっては)を取得します:
SELECT Members.MemberName, Books.BookTitle
FROM Members
RIGHT JOIN Books ON Members.MemberID = Books.MemberID;
結果を比較し、違いを見つけてください。
結論
おめでとうございます!SQLの左結合と右結合の技術をマスターしました。実践を重ねることで完璧にするので、さまざまなシナリオでこれらの結合を試してみてください。
最後に、私の生徒たちにいつも言っています:「SQLの結合はパズルのピースのようです。それを弄ぶことで、データの全体像を組み立てる技術が向上します!」
快適なクエリを楽しんでください、そしてあなたの結合は常に完璧であることを祈っています!
Credits: Image by storyset