MySQLで複数のテーブルからデータを取得するとき、JOINは非常に重要な機能です。しかし、INNER JOIN、LEFT JOIN、RIGHT JOINの違いを正しく理解していないと、必要なデータが取得できなかったり、逆に不要なデータまで含まれてしまったりすることがあります。この記事では、それぞれのJOINがどのような結果を返すのか、具体例を使いながら分かりやすく解説します。
MySQLのJOINとは何か
JOINとは、複数のテーブルを関連付けて1つの結果として取得するためのSQL構文です。データベースでは、データの重複を避けるために情報を複数のテーブルへ分割して管理することが一般的です。
例えば、顧客情報を保存するcustomersテーブルと、注文情報を保存するordersテーブルがある場合、顧客IDを利用して2つのテーブルを結合することで、顧客名と注文内容を同時に取得できます。
MySQLではINNER JOIN、LEFT JOIN、RIGHT JOINなど複数のJOIN方法があり、それぞれ取得されるデータの範囲が異なります。
INNER JOINの特徴と取得結果
INNER JOINは、結合条件に一致するデータだけを取得するJOINです。つまり、両方のテーブルに対応するレコードが存在する場合のみ結果に表示されます。
例えば、以下のようなデータがあるとします。
| customersテーブル | ordersテーブル |
|---|---|
| 田中 | 注文あり |
| 佐藤 | 注文あり |
| 鈴木 | 注文なし |
この状態でINNER JOINを実行すると、注文データが存在する田中さんと佐藤さんだけが取得されます。注文履歴がない鈴木さんは結果に含まれません。
つまりINNER JOINは「両方のテーブルに存在する共通データだけ取得したい」という場合に利用します。
LEFT JOINの特徴と取得結果
LEFT JOINは、左側に指定したテーブルのデータをすべて取得し、右側のテーブルに一致するデータがある場合だけ追加するJOINです。
例えばcustomersテーブルを左側に指定してLEFT JOINを実行すると、注文履歴がない鈴木さんも表示されます。その場合、ordersテーブル側の注文情報はNULLになります。
LEFT JOINでは左側のテーブルが基準になるため、「全顧客を表示しながら注文情報も確認したい」といった処理に向いています。
RIGHT JOINの特徴と取得結果
RIGHT JOINは、LEFT JOINとは逆に右側に指定したテーブルのデータをすべて取得するJOINです。左側のテーブルに一致するデータがない場合でも、右側のデータは結果に残ります。
例えばordersテーブルを右側に指定した場合、すべての注文情報が表示され、顧客情報が存在しない注文については顧客側の列がNULLになります。
RIGHT JOINはLEFT JOINと同じ考え方で、基準にしたいテーブルが右側にある場合に利用します。ただし、実際の開発ではSQLの読みやすさからLEFT JOINで書き換えられるケースも多くあります。
INNER JOIN・LEFT JOIN・RIGHT JOINの違いを比較
3種類のJOINの大きな違いは、どちら側のテーブルのデータを必ず残すかという点です。
| JOIN種類 | 残るデータ | 一致しない場合 |
|---|---|---|
| INNER JOIN | 両方に存在するデータ | 結果から除外される |
| LEFT JOIN | 左側テーブルの全データ | 右側がNULLになる |
| RIGHT JOIN | 右側テーブルの全データ | 左側がNULLになる |
例えば、商品一覧を表示する画面で、販売履歴がある商品だけを表示したい場合はINNER JOINが適しています。
一方で、販売履歴がない商品も含めて全商品を確認したい場合はLEFT JOINを利用します。
INNER JOINを使うべきケース
INNER JOINは、関連データが存在するものだけを対象にしたい場合に利用します。
例えば、注文済みユーザーだけを抽出したい場合や、登録済みの商品だけを集計対象にしたい場合などが該当します。
不要なNULLデータを含めず、対象データを絞り込みたい処理ではINNER JOINが適しています。
LEFT JOINを使うべきケース
LEFT JOINは、基準となる一覧をすべて取得したい場合に利用します。
例えば、社員一覧に部署情報を追加する場合、部署未登録の社員がいても社員情報自体は表示する必要があります。このような場合はLEFT JOINが適しています。
また、LEFT JOINとNULL条件を組み合わせることで、「まだ購入していない顧客」「登録されていない関連情報」などを検索することもできます。
RIGHT JOINを使うべきケース
RIGHT JOINは、右側のテーブルを必ず残したい場合に利用します。
例えば、すべての注文データを基準にして、対応する顧客情報を取得したい場合などに利用できます。
ただし、多くの開発現場ではRIGHT JOINよりもLEFT JOINを使うことで、テーブルの順番を入れ替えて同じ結果を取得することが多くあります。
JOINを選択するときの判断基準
JOINを選択するときは、「どのテーブルを必ず残したいか」を考えることが重要です。
両方のテーブルに存在するデータだけ必要ならINNER JOIN、左側のデータを維持したいならLEFT JOIN、右側のデータを維持したいならRIGHT JOINを選びます。
例えば、顧客管理システムでは全顧客を表示する画面ならLEFT JOIN、購入履歴がある顧客だけを分析する場合ならINNER JOINというように、目的によって使い分けます。
まとめ
MySQLのINNER JOIN、LEFT JOIN、RIGHT JOINは、どのテーブルのデータを結果として残すかによって使い分けます。
INNER JOINは共通するデータだけを取得し、LEFT JOINは左側のテーブルをすべて残し、RIGHT JOINは右側のテーブルをすべて残します。
JOINの違いを理解することで、必要なデータだけを正確に取得できるSQLを作成できるようになります。特に大量のデータを扱うシステムでは、取得したい結果を明確にしたうえで適切なJOINを選択することが重要です。


コメント