テーブル結合

テーブル結合

SQLでは、「join」を使用しテーブルを結合して表示させることができます。以下の2つの表を用いて3つの種類を説明していきます。

「商品」表

商品コード商品名単価
101メロン800
102いちご150
103りんご120
104レモン200
555なし555

「売上明細」表

報告書コード商品コード個数
11011011100
1101102300
11021031700
1103104500
11041012500
11051032000
1105104700
9999999999

内部結合 (inner join)

inner joinは、それぞれのテーブルの指定したカラムの値が一致するものだけを結合します。

SELECT * FROM 商品 INNER JOIN 売上明細 ON 商品 . 商品コード = 売上明細 . 商品コード ;

商品コード 商品名  単価 報告書コード商品コード 個数 
101メロン80011011011100
102いちご1501101102300
103りんご12011021031700
104レモン2001103104500
101メロン80011041012500
103りんご1201105103200
104レモン2001105104700

「商品」表の商品コード[ 555 ]、「売上明細」表の商品コード[ 999 ]はそれぞれお互いの表に存在していないので、削除されています。
内部結合の場合、ベースとなるテーブルから、条件にマッチするレコードがないものは削除されるのです。

左外部結合 (left join)

left joinでは、左側のテーブルを基準にして外部結合します。以下の場合、「商品」表が基準となります。

SELECT * FROM 商品 LEFT JOIN 売上明細 ON 商品 . 商品コード = 売上明細 . 商品コード;

商品コード 商品名  単価 報告書コード商品コード 個数 
101メロン80011041012500
101メロン80011011012500
102いちご1501101102300
103りんご12011051032000
103りんご12011021031700
104レモン2001105104700
104レモン2001103104500
555なし555NULLNULLNULL

内部結合の際は一致するデータが無かったため削除されていた[ なし ]が、外部結合の場合はデータとして残っています。
また、左の「商品」表が基準となっているため、並び順も「商品」表の商品コードがベースになっています。

右外部結合 (right join)

right joinでは、右側のテーブルを基準にして外部結合します。以下の場合、「売上明細」表が基準となります。

SELECT * FROM 商品 RIGHT JOIN 売上明細 ON 商品 . 商品コード = 売上明細 . 商品コード;

商品コード 商品名  単価 報告書コード商品コード 個数 
101メロン80011011011100
102いちご1501101102300
103りんご12011021031700
104レモン2001103104500
101メロン80011041012500
103りんご12011051032000
104レモン2001105104700
NULLNULLNULL99999999999

右側の「売上明細」が基準となるため、「売上明細」の全件は漏れなく取得されます。
そして、それに対応するデータを「商品」表から探した結果、このような形となりました。

練習問題

上記の「商品」表と「売上明細」表を使用し、質問を作成してください。

問1: 「商品」表を基準に左外部結合をして、売上明細データを表示してください。

問2: 「売上明細」表を基準に右外部結合をして、単価が150以上の果物の売上明細を表示してください。

問3: 内部結合をして、個数が1000以上の全データを表示してください。

タイトルとURLをコピーしました