SQLite - JOINS: テーブル結合の芸術をマスターする
こんにちは、未来のデータベースの達人たち!今日は、SQLiteの最もエキサイティングで(時には恐怖を伴う)側面の一つ、JOINSに潜り込んでみましょう。新しいことを学んでいる場合でも心配しないでください;このチュートリアルの終わりまでに、プロのようにテーブルを結合できるようになるでしょう!
JOINSの導入
深淵に飛び込む前に、JOINSが必要な理由について話しましょう。大規模な誕生日パーティを計画していると想像してみてください(誰だってパーティが大好きですよね?)。ゲストの名前のリストと、彼らの好みのケーキの味のリストがあります。これらのリストを結合して、それぞれのゲストが好みのケーキを確実に受け取ることができるたら素晴らしいと思いませんか?JOINSはデータベースでまさにそのことを行います。異なるテーブルから情報を有意義な方法で結合する手助けをしてくれます。
さあ、SQLiteの主な3つのJOINSの種類を見てみましょう:
- CROSS JOIN
- INNER JOIN
- OUTER JOIN
CROSS JOIN:パーティーミキサー
CROSS JOINとは?
CROSS JOINは、パーティーに出席した全員が他の全員と交流するようなものです。一つのテーブルの各行を他のテーブルの全行と結合します。これは、「みんな、お互いに会いましょう!」というデータベース版です。
CROSS JOINの構文
SELECT * FROM table1 CROSS JOIN table2;
CROSS JOINの例
パーティープランニングのための2つのシンプルなテーブルを作成してみましょう:
CREATE TABLE guests (
guest_id INTEGER PRIMARY KEY,
guest_name TEXT
);
CREATE TABLE cakes (
cake_id INTEGER PRIMARY KEY,
cake_flavor TEXT
);
INSERT INTO guests (guest_name) VALUES ('Alice'), ('Bob'), ('Charlie');
INSERT INTO cakes (cake_flavor) VALUES ('Chocolate'), ('Vanilla'), ('Strawberry');
CROSS JOINを使ってみましょう:
SELECT guests.guest_name, cakes.cake_flavor
FROM guests CROSS JOIN cakes;
このクエリは以下の結果を生成します:
guest_name | cake_flavor |
---|---|
Alice | Chocolate |
Alice | Vanilla |
Alice | Strawberry |
Bob | Chocolate |
Bob | Vanilla |
Bob | Strawberry |
Charlie | Chocolate |
Charlie | Vanilla |
Charlie | Strawberry |
ご覧の通り、各ゲストはすべてのケーキの味とペアされます。まるで全員がすべてのケーキを味わうようなものです!
CROSS JOINの使用时机
CROSS JOINは、実際のシナリオではほとんど使用されません。なぜなら、非常に大きな結果セットを生成することができるからです。しかし、組み合わせを生成するか、テストデータを作成するのに適しています。
INNER JOIN:完璧なペア
INNER JOINとは?
INNER JOINは、同じダンスを知っているダンスパートナーをペアにするようなものです。関連するカラムに基づいて2つのテーブルの行を結合します。
INNER JOINの構文
SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;
INNER JOINの例
パーティープランニングのシナリオを少し変更してみましょう。今度はゲストとそのケーキの好みがあります:
CREATE TABLE guests (
guest_id INTEGER PRIMARY KEY,
guest_name TEXT,
preferred_cake_id INTEGER
);
CREATE TABLE cakes (
cake_id INTEGER PRIMARY KEY,
cake_flavor TEXT
);
INSERT INTO guests (guest_name, preferred_cake_id) VALUES
('Alice', 1), ('Bob', 2), ('Charlie', 3), ('David', 1);
INSERT INTO cakes (cake_flavor) VALUES
('Chocolate'), ('Vanilla'), ('Strawberry');
INNER JOINを使ってゲストとその好みのケーキを一致させます:
SELECT guests.guest_name, cakes.cake_flavor
FROM guests INNER JOIN cakes ON guests.preferred_cake_id = cakes.cake_id;
このクエリは以下の結果を生成します:
guest_name | cake_flavor |
---|---|
Alice | Chocolate |
Bob | Vanilla |
Charlie | Strawberry |
David | Chocolate |
完璧です!各ゲストは好みのケーキの味と一致しています。
INNER JOINの使用时机
INNER JOINは最も一般的なJOIN種類です。2つのテーブルのデータに一致する値を取得したい場合に使用します。
OUTER JOIN:誰もが参加
OUTER JOINとは?
OUTER JOINは、パーティーで誰もが取り残されないようにするようなものです。1つまたは2つのテーブルの全行を返し、他のテーブルに一致する行がなくても構いません。
以下の3つのOUTER JOINがあります:
- LEFT OUTER JOIN
- RIGHT OUTER JOIN(SQLiteではサポートされていません)
- FULL OUTER JOIN(SQLiteでは直接サポートされていません)
ここでは、最も一般的に使用されるLEFT OUTER JOINに焦点を当てます。
LEFT OUTER JOINの構文
SELECT * FROM table1 LEFT OUTER JOIN table2 ON table1.column = table2.column;
LEFT OUTER JOINの例
ケーキの好みがないゲストを追加してみましょう:
INSERT INTO guests (guest_name, preferred_cake_id) VALUES ('Eve', NULL);
LEFT OUTER JOINを使ってみましょう:
SELECT guests.guest_name, cakes.cake_flavor
FROM guests LEFT OUTER JOIN cakes ON guests.preferred_cake_id = cakes.cake_id;
このクエリは以下の結果を生成します:
guest_name | cake_flavor |
---|---|
Alice | Chocolate |
Bob | Vanilla |
Charlie | Strawberry |
David | Chocolate |
Eve | NULL |
Eveが結果に含まれているのを見てください。彼女は好みのケーキがないにもかかわらず、LEFT OUTER JOINの魔法のために含まれます!
OUTER JOINの使用时机
OUTER JOINは、1つのテーブルの全てのレコードを含め、他のテーブルに一致するレコードがなくても良い場合に使用します。
結論
そしてここまでが、SQLiteのJOINSの素晴らしい世界への第一歩です。練習は完璧を生みますから、これらのクエリを試してみてください。
以下に、私たちがカバーしたJOINの簡単な参照表を示します:
JOIN種類 | 使用ケース |
---|---|
CROSS JOIN | すべての行を他のすべての行と結合 |
INNER JOIN | 条件に基づいて行を一致 |
LEFT JOIN | 左側のテーブルのすべての行を含め、一致する場合 |
テーブルを結合し続けて、すぐにデータベースのパーティーの中心人物になるでしょう!ハッピークエリ!
Credits: Image by storyset