SQL-結合方法について|テーブル結合と項目結合の違い・使い分け

2025年5月9日

とてぃです。

新人さんから「SQLの結合方法(テーブル結合・項目結合)って、なぜ必要なの?」と質問を受けたので、改めて整理してみました。業務ロジックで“当たり前”になっていることも、初心者に分かりやすく説明できるようにしておくと役立ちます。

結合条件について

SQLで複数のテーブルからデータを取得する場合、主に「項目結合」「テーブル結合」の2種類の書き方・考え方があります。

項目結合(WHERE句による結合)

SELECT *
FROM aaaa, bbbb, cccc
WHERE aaaa.test = bbbb.test
  AND aaaa.test = cccc.test;

この書き方は「カンマ区切りでテーブルを並べ、WHERE句で結合条件を指定」する方法です。
古いSQLや簡単な結合でよく使われますが、複雑な結合や外部結合には向きません

テーブル結合(JOIN句による結合)

SELECT *
FROM aaaa
INNER JOIN bbbb ON aaaa.test = bbbb.test   -- 内部結合
LEFT OUTER JOIN cccc ON aaaa.test = cccc.test;   -- 外部結合

この書き方は「JOIN句」でテーブル同士を明示的に結合します。
INNER JOINは両方のテーブルに一致するデータだけを取得、
LEFT OUTER JOINは左側(aaaa)のテーブルのデータを全て取得し、右側(cccc)に一致するデータがあれば結合、なければNULLになります。

INNER JOINは両方のテーブルに同じデータがある場合のみ結合します。
OUTER JOINは、結合先にデータが存在しない場合はNULLになります。

JOINの種類と使い分け

  • INNER JOIN(内部結合):両方のテーブルに一致するデータのみ取得
  • LEFT OUTER JOIN(左外部結合):左側のテーブルの全データ+一致する右側のデータ(なければNULL)
  • RIGHT OUTER JOIN(右外部結合):右側のテーブルの全データ+一致する左側のデータ(なければNULL)
  • FULL OUTER JOIN(全外部結合):両方のテーブルの全データ+一致しない部分はNULL(DBによっては未対応)

なぜ結合が必要なのか?

  • 複数のテーブルに分散したデータを「ひとつの結果」として取得できる
  • 正規化されたDB設計では、必要な情報が複数テーブルに分かれていることが多い
  • JOINを使いこなすことで、複雑な業務ロジックや集計もSQLだけで効率的に処理できる

ベストプラクティス・注意点

  • 新しいSQLではJOIN句を使う書き方が推奨(可読性・保守性が高い)
  • WHERE句での結合(項目結合)は、意図しないクロス結合(全組み合わせ)にならないよう注意
  • 結合条件が複数ある場合は、ON句やANDで明示的に指定
  • 結合キー(主キー・外部キー)の型や値の整合性に注意

まとめ

  • SQLの結合には「項目結合(WHERE句)」と「テーブル結合(JOIN句)」がある
  • INNER JOINは両方のテーブルに一致するデータのみ、OUTER JOINは片方の全データ+一致部分を取得
  • JOIN句を使うことで、複雑な業務要件も効率よく実現できる
  • 可読性・保守性のためにもJOIN句の利用を推奨

SQLの結合はデータベース操作の基本です。新人さんもぜひ実際にSQLを書いて、違いを体感してみてください。
最後まで読んでいただきありがとうございました。

技術

Posted by xxoruioxx