SQL|JOINを使ったテーブル結合

SQL|JOINを使ったテーブル結合

データベースをイメージする画像

JOIN結合の種類

INNER JOIN(内部結合)

指定した条件が結合する両方のテーブルにマッチするレコードのみを返します。

Cの部分です。

LEFT or RIGHT JOIN(外部結合)

ここではLEFT JOINで説明します。
結合の左側のテーブルの全レコードとで指定した条件がマッチする右側のレコードを返します。

LEFT-JOIN

FULL JOIN(外部結合)

指定した条件がマッチするレコードとマッチしない両方のテーブルのレコードも返します。

FULL-JOIN

CROSS JOIN(クロス結合)

左右両方の各テーブルの全ての組み合わせパターンを返します。

分かりにくく、使用することが非常に少ないので説明は省きます。

どの結合方法を使う?

用途によって結合方法を選んで使用するのが便利かもしれませんが、色んな種類の結合を使用するとデバッグ等で苦労します。

また、コードの再利用も面倒くさいので私は特別な理由がない限り、LEFT JOINしか使いません。

これだけで殆どの仕様をカバーできます。

LEFT JOINの使い方

テーブルを容易

テーブルA

A列1 A列2 A列3 A列4 A列5

 

テーブルB

B列1 B列2 B列3 B列4 B列5

 

テーブルAとテーブルBの2つのテーブルを用意しました。

夫々、列が5つ存在します。

LEFT JOINを使ったSQL文

SELECT
        A列1,
        A列2,
        A列3,
        B列1,
        B列2,
        B列3
    FROM
        テーブルA
            LEFT    JOIN    テーブルB    ON
                A列1    =   B列1  

テーブルAをメインテーブルとしてテーブルBを接続します。

A列1とB列1が一致するテーブルBが接続されます。

テーブルBに一致するレコードが存在しなくても、テーブルAの内容は表示されますがテーブルBの内容はNULLで表示されます。

1:1のテーブル結合でしたが、1:複数の場合もついでに紹介します。

1:複数のLEFT JOIN

SELECT
        A列1,
        A列2,
        A列3,
        B列1,
        B列2,
        B列3,
        C列1,
        C列2,
        C列3,
    FROM
        (
            テーブルA
                LEFT    JOIN    テーブルB    ON
                    A列1    =   B列1  
        )
                LEFT    JOIN    テーブルC    ON
                    A列2    =   C列3

このように”(“カッコを使用してネストします。

この場合もメインテーブルはテーブルAでテーブルBとテーブルCを結合します。

コメント