データベースの用語一覧へ
このページの目次
データベース中級図解あり

JOINとは?

読み方:じょいん

最終更新:2026/08/18

3秒でわかる

複数のテーブルを共通の列で結び付け、1つの結果表にするSQLの操作。重複を避けて分けて保存したデータを、表示のたびに組み立て直します。

30秒図解

JOINはcustomersのid42の田中1行とordersのcustomer_id42の注文3行を結び、田中を3行へ複製した結果表を作る
JOIN 後に集計する前に、結合前後の行数が 1 × 3 → 3 になったかを確かめる

もう少し詳しく

どういうものか

JOIN は、別々のテーブルに入っているデータを共通の列でつなぎ、1 つの結果表として取り出す SQL の操作です。注文テーブルには顧客IDしか入っていなくても、顧客テーブルと ID で結べば、注文一覧に氏名を並べて表示できます。つなぎ方には内部結合と外部結合があり、片方にしか無い行をどう扱うかで使い分けます。

なぜ必要か

データベースでは、同じ情報を 1 か所にだけ持たせる設計をします。注文のたびに顧客名をコピーして保存すると、改姓のときに全件を直す必要が生じ、直し漏れた行だけ古い名前が残ります。だから分けて持ちます。ただし人が見る画面では、分けたままでは意味が読み取れません。保存は分けて、表示のときに組み立て直す。その組み立てを担うのが JOIN です。

具体例

SELECT o.id, o.ordered_at, c.name, o.amount FROM orders AS o INNER JOIN customers AS c ON o.customer_id = c.id WHERE o.ordered_at >= '2026-08-01' ORDER BY o.ordered_at DESC; -- 注文が1件も無い顧客も出したい場合 SELECT c.name, COUNT(o.id) AS order_count FROM customers AS c LEFT JOIN orders AS o ON c.id = o.customer_id GROUP BY c.name;

つまずきやすいところ

件数が想定より増える現象が最初の関門です。結合先に同じキーの行が 3 件あれば、元の 1 行は 3 行に膨らみます。この状態で合計を出すと金額が 3 倍になり、しかもエラーは出ません。合計が合わないときは、まず結合前後の行数を数えて比べます。もうひとつは LEFT JOIN の相手側に WHERE の条件を書く誤りで、WHERE o.status = 'done' と書いた瞬間、NULL の行が落ちて内部結合と同じ結果になります。この条件は ON 句に書きます。

似た用語との違い

種類残る行
INNER JOIN両方に一致がある行だけ
LEFT JOIN左の全行と、一致した右の値
RIGHT JOIN右の全行と、一致した左の値
CROSS JOIN全組み合わせ


覚え方

JOIN は表をつなぐのではなく、行と行をつなぐ操作です。左の 1 行に対して右が何行当たるのかを先に考えておくと、件数が膨らむ事故も、行が消える事故も避けられます。1 対 1 なら安全、1 対多なら合計に注意が要ります。

次に学ぶ

インデックスとは?

知識のつながり

サイドバーと同じ推奨ルート・関連語を、まとめて確認できます。

現在地JOINDB

LEARN BY DOING

この用語を、教材で使ってみる

直接関連する編と、その編を含むコースです。用語だけで終わらず、ブラウザ上で実際に手を動かせます。

この用語を扱うコース

コース

SQL入門:データベース操作のきほん

71レッスン
コース

SQL道場 図書館DBに挑む10問

10レッスン
コース

DB設計入門 ER図・正規化・インデックス

47レッスン
SQL・データベースコースの全編を見る