テーブルを結合するJOIN句とは?
2つ以上のテーブルを特定のルールで結合して1つのテーブルのようにすることです
結合には「INNER JOIN」、「LEFT JOIN」、「RIGHT JOIN」
等と様々ありますが、都度、使い分けるとデバックがややこしくなるので、私は極力「LEFT JOIN」を使うようにしています
2つ以上のテーブルを特定のルールで結合して1つのテーブルのようにすることです
結合には「INNER JOIN」、「LEFT JOIN」、「RIGHT JOIN」
等と様々ありますが、都度、使い分けるとデバックがややこしくなるので、私は極力「LEFT JOIN」を使うようにしています
「LEFT JOIN」とは?
左外部結合と言い、左側に書いたメインテーブルに結合する外部結合します
左側のメインテーブルに存在する行は右側のテーブルに同じキーの行が無くても全て取得されますが、右側のテーブルだけにしか存在しない行は取得されません
「テーブルA」をメインテーブルとして「得意先区分」をキーにして「テーブルB」を左外部結合します
このようになります
左外部結合と言い、左側に書いたメインテーブルに結合する外部結合します
左側のメインテーブルに存在する行は右側のテーブルに同じキーの行が無くても全て取得されますが、右側のテーブルだけにしか存在しない行は取得されません
| テーブルA | テーブルB | ||||
| 得意先コード | 得意先名 | 得意先区分 | 区分 | 名称 | |
| 1 | 鈴木商事 | 1 | 1 | 法人 | |
| 2 | 佐藤 一郎 | 2 | 2 | 個人事業 | |
| 3 | 鈴木 二郎 | 3 |
「テーブルA」をメインテーブルとして「得意先区分」をキーにして「テーブルB」を左外部結合します
このようになります
| 得意先コード | 得意先名 | 得意先区分 | 名称 |
| 1 | 鈴木商事 | 1 | 法人 |
| 2 | 佐藤 一郎 | 2 | 個人事業 |
| 3 | 鈴木 二郎 | 3 | Null |
左外部結合するSQL文
「テーブルA」をメインテーブルとしてテーブルAの「列1」とテーブルBの「列1」をキーに「テーブルB」を左外部結合するSQL文です
「テーブルA」をメインテーブルとしてテーブルAの「列1」とテーブルBの「列1」をキーに「テーブルB」を左外部結合するSQL文です
SELECT
テーブルA.列1,
テーブルA.列2,
テーブルA.列3,
テーブルB.列1,
テーブルB.列2
FROM
テーブルA
LEFT JOIN テーブルB ON
テーブルB.列1 = テーブルA.列1
2つ以上のテーブルを結合する
「FROM」句に「JOIN」は1つしか記述できないので2つ以上のテーブルを結合するには「(」カッコでネストすることで可能になります
「FROM」句に「JOIN」は1つしか記述できないので2つ以上のテーブルを結合するには「(」カッコでネストすることで可能になります
SELECT
テーブルA.列1,
テーブルA.列2,
テーブルA.列3,
テーブルB.列1,
テーブルB.列2,
テーブルC.列1,
テーブルC.列2
FROM
(
テーブルA
LEFT JOIN テーブルB ON
テーブルB.列1 = テーブルA.列1
)
LEFT JOIN テーブルC ON
テーブルC.列1 = テーブルA.列1