SQL入門 内部結合 inner join 外部結合SQL Server 

      2016/05/04

目次

内部結合 inner join

外部結合 left outer join right outer join

内部結合 inner join

内部結合はテーブルを一時的に結合することです。

分類マスタと商品テーブルを結合します。

select * from 商品テーブル 商品 inner join 分類マスタ 分類 on 商品.分類コード = 分類.分類コード

構文
------------------------------------------------------------------------------------------------------
select 列名 from テーブル名1 別名1 inner join テーブル名2 別名2 on 別名1.結合する列名 = 別名2.結合する列名
------------------------------------------------------------------------------------------------------

テーブルに別名をつけて重複する列名で結合しています。

外部結合 left outer join right outer join

外部結合には二つあります。
左外部結合と右外部結合です。

左外部結合
select * from 商品テーブル 商品 left outer join 分類マスタ 分類 on 商品.分類コード = 分類.分類コード
右外部結合
select * from 商品テーブル 商品 right outer join 分類マスタ 分類 on 商品.分類コード = 分類.分類コード

2つを比較したとき表示結果が変わったと思います。
左外部結合ではデータのないnullが表示されました。
右外部結合ではnullではなく対象レーコードは表示されていません。

どちらを主として結合するかです。
左外部結合では商品テーブルの全てのデータに対して分類マスタを結合しています。
データがないのでnullで結合されています。

右外部結合では分類マスタの全てのデータに対して商品テーブルを結合してます。
先ほどのnullは分類マスタにデータがないモノは結合対象にないので結合されません。

環境によって表示結果は違うとは思います。
今回は分類マスタに登録を忘れたか商品テーブルに登録するときに誤って分類マスタにない分類コードを登録してしまった時を想定してます。
本来このようなデータの状態はおかしいです。

構文
-------------------------------------------------------------------------------------------------------
左外部結合
select * from 主テーブル名 別名1 left outer join 結合先テーブル名 別名2 on 別名1.分類コード = 別名2.分類コード
-------------------------------------------------------------------------------------------------------
右外部結合
select * from 結合先テーブル名 別名1 right outer join 主テーブル名 別名2 on 別名1.分類コード = 別名2.分類コード
-------------------------------------------------------------------------------------------------------

次回はUINONです。

PR



 - SQL , , ,

Translate »