JOINとは、複数のテーブルを1つの画面で見るための仕組みです
JOINとは、別々のテーブルに分かれたデータを、共通の値で結びつけて1つの結果として見るSQLの書き方です。たとえば、顧客の表と注文の表が別々にあっても、JOINを使えば「誰が、いつ、何を注文したか」をまとめて確認できます。検索したい内容は、まさにこの「複数のテーブルを組み合わせて見る方法」です。
データベースでは、情報をわざと分けて保存することがよくあります。分けておくと、同じ名前を何度も書かずにすみ、更新もしやすくなります。ただし、見るときにはバラバラだと不便です。そこでJOINが役に立ちます。JOINは、表と表をくっつける接着剤のようなものですが、ただ並べるだけではありません。同じ意味を持つ列どうしを手がかりに、正しく対応づけるのが大事です。
JOINの基本は、どの列でつなぐかを決めることです。多くの場合は、顧客IDや商品IDのような番号を使います。名前でつなぐこともできますが、表記ゆれや同姓同名で間違えやすくなります。まずは「IDでつなぐ」と覚えると、実務でも迷いにくくなります。
よくある疑問:JOINって、2つの表を足し算する感じですか?
足し算というより、共通の鍵で行どうしをつなぐ作業です。必要な列だけを1つの結果にまとめて見られます。
JOINの基礎をおさえる
JOINでまず押さえたいのは、テーブル、行、列、キーの4つです。テーブルは表そのもの、行は1件分のデータ、列は項目、キーは他の表と結びつけるための目印です。たとえば顧客表のcustomer_idと、注文表のcustomer_idが同じなら、その注文はその顧客のものだと分かります。
JOINにはいくつか種類がありますが、最初に覚えるのはINNER JOINとLEFT JOINで十分です。INNER JOINは、左右の表で両方に一致した行だけを出します。LEFT JOINは、左側の表の行を基準にして、右側に一致する行があれば結びつけ、なければ右側を空にして残します。実務では「一致したものだけ見たい」のか、「左側の一覧は欠かさず見たい」のかで使い分けます。
テーブル同士の関係を図で見るなら、先にER図を確認すると理解しやすくなります。ER図は、どの表がどの表につながるかを整理する地図のようなものです。JOINはその地図に沿って、実際にデータを取り出す操作だと考えると分かりやすいです。
身近なたとえで考えるJOIN
JOINを、学校の名簿とクラブ活動の名簿で考えてみましょう。学年の名簿には「出席番号と名前」があり、クラブの名簿には「出席番号と所属クラブ」があるとします。出席番号が同じ生徒どうしをつなぐと、「この生徒は何年何組で、どのクラブに入っているか」を1枚で見られます。これがJOINの役目です。
ここで大事なのは、同じ人を示す番号で結びつけることです。名前だけでつなぐと、同じ名前の生徒がいたときに間違えます。住所や電話番号でも、途中で変わることがあります。だから実務では、変わりにくくて重ならないIDを使うことが多いのです。JOINは見た目はむずかしく見えても、やっていることは「同じものを同じと見なして並べる」だけです。
家計簿でも同じです。支出表と支払い方法の表を分けておき、JOINで組み合わせると、「何に使ったか」と「どのカードで払ったか」を一緒に見られます。表を分けるのは整理のため、JOINは再び一緒に見るため、と覚えるとスッキリします。
実務でのJOINの使い方
実務では、JOINはレポート作成や画面表示でよく使います。たとえば、ECサイトでは注文情報だけでは「誰の注文か」が分かりにくいので、顧客テーブルとJOINして表示します。管理画面では、商品テーブル、在庫テーブル、カテゴリテーブルを組み合わせて一覧を作ることもあります。SQLは短く見えても、裏では複数の表をうまくまとめています。
たとえば、次のようなデータがあるとします。
- customers:customer_id、customer_name
- orders:order_id、customer_id、order_date
この2つを結びつけるときは、customer_idを使います。
SELECT
o.order_id,
o.order_date,
c.customer_name
FROM orders o
INNER JOIN customers c
ON o.customer_id = c.customer_id;
このSQLは、注文ごとに顧客名をくっつけて表示します。ポイントは、ONのあとに「どの列どうしを一致させるか」をはっきり書くことです。ここがJOINの心臓部分です。
もし「注文がない顧客も一覧に出したい」なら、LEFT JOINを使います。
SELECT
c.customer_name,
o.order_id,
o.order_date
FROM customers c
LEFT JOIN orders o
ON c.customer_id = o.customer_id;
これなら、注文していない顧客も消えません。右側の注文情報は空欄になります。営業リストや会員一覧のように、基準の表を欠かさず出したい場面で便利です。
JOINでよくある失敗は、つなぐ条件があいまいなことです。たとえば、複数の列を使うべきなのに1列だけで結びつけると、同じデータが余計に増えたり、逆に抜けたりします。また、必要ない列まで全部出すと、結果が見づらくなります。実務では「必要な列だけ選ぶ」「どの表が主役かを決める」「IDでつなぐ」を意識すると、ミスを減らせます。
図解で整理
JOINすると結果がどう変わるか
顧客
| ID | 名前 |
|---|---|
| C01 | 田中 |
| C02 | 鈴木 |
注文
| 顧客ID | 商品 |
|---|---|
| C01 | 本 |
| C02 | ペン |
| 名前 | 商品 |
|---|---|
| 田中 | 本 |
| 鈴木 | ペン |

JOINの流れは、次の順番で考えると整理しやすいです。
- 左の表と右の表を決める
- どの列で結ぶかを決める
- 一致する行を探す
- 必要な列だけを結果として出す
この流れを図にすると、JOINは「2つの表をそのまま足す」のではなく、「条件に合う行だけを対応づけて新しい見え方にする」作業だと分かります。特に初心者は、表を1つにコピーするイメージより、対応表を作るイメージで覚えると理解が安定します。
たとえば、次のように考えます。
- 顧客表にあるIDを見つける
- 注文表の同じIDを探す
- 見つかった行どうしを横に並べる
- 一致しないときは、JOINの種類に応じて残すか消すかを決める
また、JOINを学ぶときは、SQLだけで覚えるより、先に「表どうしの関係」を理解したほうが早いです。ER図で1対1、1対多、多対多の関係をざっくり見ておくと、「なぜこの列でつなぐのか」が自然に分かってきます。JOINの条件は、表の関係をそのまま反映していることが多いからです。
なお、JOINはデータベースによって細かな書き方や使える種類が少し違うことがあります。ですが、最初に押さえるべき考え方は共通です。表を分けて持ち、必要なときに条件でつなぐ。これがJOINの本質です。
クイズで確認しよう
第1問 JOINの役割として、もっとも近いものはどれでしょう。
- A. テーブルを消す
- B. 複数のテーブルを条件でつないで見る
- C. データベースを閉じる
- D. 列の文字数を増やす
答えを見る
答え:B. 複数のテーブルを条件でつないで見る
第2問 左側の表の行をできるだけ残したまま、右側の情報を結びつけたいときに使うことが多いJOINはどれでしょう。
- A. INNER JOIN
- B. LEFT JOIN
- C. DROP JOIN
- D. COPY JOIN
答えを見る
答え:B. LEFT JOIN
第3問 JOINで、表どうしを正しく結びつけるために最も大切なものはどれでしょう。
- A. 関係ない列をたくさん入れること
- B. できるだけ長い文字列を使うこと
- C. 共通の値でつなぐこと
- D. 表を全部ひとつにまとめること
答えを見る
答え:C. 共通の値でつなぐこと
まとめ
JOINとは、別々のテーブルを共通の列で結びつけて、1つの結果として見るSQLです。まずはINNER JOINとLEFT JOINの違いをおさえ、ONで何を結ぶのかを意識しましょう。実務では、顧客表と注文表、商品表と在庫表のように、複数の表を一緒に見る場面でよく使います。表の関係を先にER図で確認してからSQLを書くと、JOINの理解がぐっと安定します。
