SQLを学び始めてSELECT文やWHERE句に慣れてきたころ、多くの方がJOINで一度つまずきます。「なんとなく動いているけど、LEFT JOINとINNER JOINの違いがよくわからない」という状態になりやすい箇所です。この記事では、実際のテーブルデータを使いながら、JOINの種類と使い分けを整理します。
JOINとは何か:2つのテーブルをつなぐ ¶
JOINは、2つのテーブルを特定の列の値をもとに結合する操作です。たとえば「注文テーブル」と「顧客テーブル」があるとき、注文ごとに顧客の名前を表示したい場合にJOINを使います。結合の条件は通常、両方のテーブルに共通して存在するID列などを使います。JOINの種類によって、どの行を結果に含めるかが変わります。
INNER JOIN:両方のテーブルに存在する行だけ ¶
INNER JOINは、結合条件を満たす行だけを結果に返します。注文テーブルに顧客IDが記録されていても、その顧客IDが顧客テーブルに存在しない場合、その注文行は結果に含まれません。逆に、注文のない顧客も結果には含まれません。「両方のテーブルに対応するデータがある行だけ欲しい」という場合に使います。最もよく使われるJOINの種類です。
LEFT JOIN:左のテーブルの行はすべて残す ¶
LEFT JOINは、FROM句に書いたテーブル(左のテーブル)の行をすべて結果に含めます。右のテーブルに対応する行がない場合、右のテーブルの列はNULLになります。「注文があるかどうかにかかわらず、すべての顧客を一覧したい」という場合に使います。NULLが含まれることを前提に、WHERE句でNULLを条件にすることもできます。
どちらを使うか迷ったときの判断基準 ¶
「結合先にデータがない行を結果に含めたいか」で判断します。含めたくない場合はINNER JOIN、含めたい場合はLEFT JOINを選びます。RIGHT JOINはLEFT JOINのテーブルの順序を入れ替えたものと同じ結果になるため、LEFT JOINに統一して書く方が読みやすいコードになります。実務ではINNER JOINとLEFT JOINの2種類を使いこなせれば、大半のケースに対応できます。
JOINの種類を理解すると、複数のテーブルを組み合わせたクエリが書けるようになり、SQLの表現力が大きく広がります。Majestash HarborのSQLコースでは、実際のサンプルデータを使ってJOINを演習形式で学べます。