初心者のためのSQLテーブル結合JOIN句を全パターン総まとめ、ベン図で視覚的に最速かつわかりやすく

SQL

スポンサーリンク

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は存在しません。)

以上です。

SQL

Posted by このめ