2017年4月2日日曜日

SQL Server テーブルを結合するJOIN句

テーブルを結合するJOIN句とは?

2つ以上のテーブルを特定のルールで結合して1つのテーブルのようにすることです

結合には「INNER JOIN」、「LEFT JOIN」、「RIGHT JOIN」
等と様々ありますが、都度、使い分けるとデバックがややこしくなるので、私は極力「LEFT JOIN」を使うようにしています

「LEFT JOIN」とは?

左外部結合と言い、左側に書いたメインテーブルに結合する外部結合します
左側のメインテーブルに存在する行は右側のテーブルに同じキーの行が無くても全て取得されますが、右側のテーブルだけにしか存在しない行は取得されません

テーブルAテーブルB
得意先コード得意先名得意先区分区分名称
1鈴木商事11法人
2佐藤 一郎22個人事業
3鈴木 二郎3

「テーブルA」をメインテーブルとして「得意先区分」をキーにして「テーブルB」を左外部結合します

このようになります
得意先コード得意先名得意先区分名称
1鈴木商事1法人
2佐藤 一郎2個人事業
3鈴木 二郎3Null

左外部結合する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つ以上のテーブルを結合するには「(」カッコでネストすることで可能になります
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