初心者のためのSQLテーブル結合JOIN句を全パターン総まとめ、ベン図で視覚的に最速かつわかりやすく
SQLを使っていると頻繁に出てくるJOIN句、いざ書いたり読んだりしていると「ん、これどうなってるんだ?」と思うこともしばしば。
今回は初心者向けにベン図で視覚的にわかるように、SQLのJOIN全パターンをまとめました。
INNER JOIN
概要
INNER JOINは「AかつB」です。
テーブルAのキーとテーブルBのキーを紐づけています。
SQLクエリ
SELECT *
FROM A
INNER JOIN B ON A.key = B.key
ベン図
FULL OUTER JOIN
概要
FULL JOIN も FULL OUTER JOIN も同じで、「AまたはB」です。
以下出てくるもの(INNER JOIN 以外)はすべて OUTER JOIN の仲間です。紹介するクエリでは OUTER を省略していますが、必要に応じて変更してください。
SQLクエリ
SELECT *
FROM A
FULL JOIN B ON A.key = B.key
ベン図
FULL OUTER JOIN EXCLUSIVE
概要
「AまたはB」から「AかつB」を除いたものです。
EXCLUSIVE という呼び方が一般的かは分かりませんが、ここではAとBとで被っている部分を除く場合を EXCLUSIVE と表現することにします。
SQLクエリ
SELECT *
FROM A
FULL JOIN B ON A.key = B.key
WHERE A.key IS NULL OR B.key IS NULL
ベン図
LEFT OUTER JOIN
概要
数学的な集合としては「A」に見えますし、データ的な認識としても正しいのですが、返ってくる結果の中には、Bにしかない列も含まれる(データはNULL)ため注意してください。
SELECTされるデータは A だけど、列は A と B の両方ということです。ややこしいですね。
SQLクエリ
SELECT *
FROM A
LEFT JOIN B ON A.key = B.key
ベン図
LEFT OUTER JOIN EXCLUSIVE
概要
「A」から「AかつB」を除いたものです。列に関する注意は LEFT OUTER JOIN を参照ください。
FULL OUTER JOIN のときと同様に、LEFT OUTER JOIN にも EXCLUSIVE の場合があります。
SQLクエリ
SELECT *
FROM A
LEFT JOIN B ON A.key = B.key
WHERE B.key IS NULL
ベン図
RIGHT OUTER JOIN
LEFT OUTER JOIN と同様、「B」ですが列は A も含まれます。
SQLクエリ
SELECT *
FROM A
RIGHT JOIN B ON A.key = B.key
ベン図
RIGHT OUTER JOIN EXCLUSIVE
「B」から「AかつB」を除いたものです。列に関する注意は LEFT OUTER JOIN を参照ください。
FULL OUTER JOIN のときと同様に、LEFT OUTER JOIN にも EXCLUSIVE の場合があります。
SQLクエリ
SELECT *
FROM A
RIGHT JOIN B ON A.key = B.key
WHERE B.key IS NULL
ベン図
あくまで一般的な認識をまとめてみました。お使いのSQLによっては異なる場合がありますので、都度対応するようにしてください。(例えば、SQLite3であればRIGHT JOINは存在しません。)
以上です。
ディスカッション
コメント一覧
まだ、コメントがありません