SQLの基本|JOINの種類を図解で理解する

プログラミング言語

SQLのJOINは、複数テーブルからデータを結合して取得するための基本機能です。INNER・LEFT・RIGHT・FULL・CROSSなどの種類があり、正しく使い分けるとデータ取得が大幅に簡潔になります。本記事では、JOINの種類を図解的に整理します。

テストテーブル

users      orders
+----+----+ +----+--------+
| id |name| | id |user_id |
+----+----+ +----+--------+
| 1  | A  | | 10 | 1      |
| 2  | B  | | 11 | 1      |
| 3  | C  | | 12 | 2      |
                | 13 | 99     |

INNER JOIN

両テーブルで一致した行だけ取得。

SELECT u.name, o.id
FROM users u
INNER JOIN orders o ON o.user_id = u.id;

-- 結果: (A,10), (A,11), (B,12)
-- ※ C や user_id=99 は除外

LEFT JOIN

左テーブルは全件、右に一致がなければNULL。

SELECT u.name, o.id
FROM users u
LEFT JOIN orders o ON o.user_id = u.id;

-- 結果: (A,10), (A,11), (B,12), (C, NULL)

RIGHT JOIN

LEFT JOINの左右が逆。右テーブルが全件。

FULL OUTER JOIN

両方の全件を結合し、不一致部分はNULL。

SELECT u.name, o.id
FROM users u
FULL OUTER JOIN orders o ON o.user_id = u.id;

-- 結果: A・B・Cと、user_id=99のorderすべて

CROSS JOIN

すべての組み合わせ(直積)。テストデータ生成等で使う。

SELECT u.name, o.id
FROM users u
CROSS JOIN orders o;
-- 行数 = users行数 × orders行数

SELF JOIN

同一テーブルを自分自身と結合。社員→上司のような階層データに使う。

SELECT e.name, m.name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.id;

JOIN条件の書き方

  • ON句:結合条件を明示(推奨)
  • USING句:両テーブルの同名カラムで結合
  • NATURAL JOIN:同名カラムを自動的に結合(非推奨)

パフォーマンスのコツ

  • JOINキーには必ずインデックス
  • WHERE で先に絞ってから JOIN
  • EXPLAINで実行計画を確認
  • 過剰なJOINは正規化見直しの合図

まとめ

JOINは「INNER(一致のみ)」「LEFT(左基準)」「FULL(両方)」「CROSS(直積)」の4種を押さえれば、ほとんどの実務ケースで困らなくなります。図と共に手を動かして練習するのが理解の近道です。