はじめに
SQLを使い始めて少し経ちましたが、テーブル結合の種類が多くいまいち覚えきれていないため備忘録を残します。
同じような方のお役に立てば幸いです。
テーブル結合の種類
テーブル結合には以下の種類があります。
種類 | 概要 |
---|---|
内部結合(INNER JOIN) | テーブル間で指定した項目が一致するレコードのみを取得する |
外部結合(OUTER JOIN) | テーブル間で指定した項目が一致しないレコードも取得する |
交差結合(CROSS JOIN) | テーブル間の全てのレコードの組合せを取得する |
自然結合(NATURAL) | 項目を指定しなくてもテーブル間で共通する項目で結合して取得する |
統合結合(UNION) | 2つの問い合わせで得られた表を統合して取得する |
ここから先はよく使う内部結合と外部結合について記述します。
内部結合(INNER JOIN)
内部結合は、テーブル間で指定した項目が一致するレコードのみを取得します。
例えば、以下のようなSQLクエリがあります。
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id;
このクエリは、table1とtable2のidカラムが一致するレコードを結合し、結果として共通するレコードのみを取得します。
外部結合(OUTER JOIN)
外部結合は、テーブル間で指定した項目が一致しないレコードも取得します。
外部結合には、主に以下の3種類があります。
種類 | 概要 |
---|---|
左外部結合(LEFT OUTER JOIN) | 左側のテーブルの全てのデータと、右側のテーブルの一致するデータを取得する |
右外部結合(RIGHT OUTER JOIN) | 右側のテーブルの全てのデータと、左側のテーブルの一致するデータを取得する |
完全外部結合(FULL OUTER JOIN) | 両方のテーブルの全てのデータを結合し、どちらか一方に一致するデータも含めて取得する |
左外部結合(LEFT OUTER JOIN)
左外部結合は、左側のテーブルの全てのデータと、右側のテーブルの一致するデータを取得します。
例えば、以下のようなSQLクエリがあります。
SELECT * FROM table1 LEFT JOIN table2 ON table1.id = table2.id;
このクエリは、table1の全ての行と、table2の一致する行を結合し、table2に一致する行がない場合はNULLを返します。
右外部結合(RIGHT OUTER JOIN)
右外部結合は、右側のテーブルの全てのデータと、左側のテーブルの一致するデータを取得します。
例えば、以下のようなSQLクエリがあります。
SELECT * FROM table1 RIGHT JOIN table2 ON table1.id = table2.id;
このクエリは、table2の全ての行と、table1の一致する行を結合し、table1に一致する行がない場合はNULLを返します。
完全外部結合(FULL OUTER JOIN)
完全外部結合は、両方のテーブルの全てのデータを結合し、どちらか一方に一致するデータも含めて取得します。
例えば、以下のようなSQLクエリがあります。
SELECT * FROM table1 FULL JOIN table2 ON table1.id = table2.id;
このクエリは、table1とtable2の全ての行を結合し、どちらか一方に一致するデータも含めます。
一致しない部分にはNULLが入ります。
以上です。
またなにかあれば追記します。