知識がうやむやになってたのでまとめます。
INNER JOIN(内部結合)
2つのテーブルで両方に一致するデータのみを結合します。どちらかのテーブルに該当データがない場合、その行は結果に含まれません。
LEFT JOIN(左外部結合)
左側のテーブルのすべてのデータを保持し、右側のテーブルから一致するデータを結合します。右側に一致するデータがない場合は、NULLが入ります。
具体例
例えば、「顧客」テーブルと「注文」テーブルがあるとします。
INNER JOINの場合:
SELECT 顧客.名前, 注文.商品
FROM 顧客
INNER JOIN 注文 ON 顧客.ID = 注文.顧客ID;
→ 注文したことがある顧客のみが結果に表示されます
LEFT JOINの場合:
SELECT 顧客.名前, 注文.商品
FROM 顧客
LEFT JOIN 注文 ON 顧客.ID = 注文.顧客ID;
→ すべての顧客が表示され、注文していない顧客の「商品」列にはNULLが入ります
使い分け
- INNER JOIN: 両方のテーブルに関連データが必ず存在する場合
- LEFT JOIN: 左側のテーブルのデータを全て残したい場合(例:全顧客リストを出して、注文の有無を確認したい時)
どちらを使うかは、「マッチしないデータをどう扱いたいか」によって決まります。