初詣合格祈願SQL講座

SQL講座 複数の表の連携8

目指せ!SQL

初詣合格祈願SQL講座 複数の表の連携8

サブクエリーの抽出結果が複数になる場合

サブクエリーの抽出結果が複数になる場合は、IN演算子を使用します。

<例題>
売上表の日付が"2001/06/27"の行を抽出し、商品表と売上明細から売上No、商品名、単価、数量と売上金額を表示する。なお、売上金額は単価*数量で計算する。

商品表(主キー:商品コード)
商品CD商品名単価
10鉛筆30
20消しゴム50
30シャープペン250
40ボールペン150
50色鉛筆700
60ノート100

売上No日付顧客CD
12001/05/27105
22001/05/27101
32001/05/27103
42001/06/27102
52001/06/27104

売上明細(主キー:売上No,連番)
売上No連番商品CD数量
111010
12307
136025
212015
22403
31308
324030
335012
346050
412021
424021
511017
52205

顧客表(主キー:顧客CD)
顧客CD顧客名
101二島商店
102姫路商事
103大阪物産
104神戸商店
105福岡商事

SELECT 売上No,商品名,単価,数量,単価*数量
FROM 商品表,売上明細
WHERE 商品表.商品CD=売上明細.商品CD ← 商品表の商品CDと売上明細の商品CDが一致する行を結合
AND 売上No IN(SELECT 売上No
FROM 売上表
WHERE 日付="2001/06/27")

実行結果
売上No商品名単価数量
4消しゴム509450
4ボールペン150213150
5鉛筆3017510
5消しゴム505250

例題SELECT文の実行順序は次のとおりです。

  1. FROM句で記述されている「商品表」と「売上明細」を読み込む
  2. WHERE句で指定されているカッコ内のSELECT文の実行をおこなう
    (SELECT 売上No
    FROM 売上表 ⇒ 売上No 4 5
    WHERE 日付="2001/06/27")
  3. WHERE句で記述された「商品表.商品CD=売上明細.商品CD」商品表の商品CDと売上明細の商品CDが一致する行を抽出する
    売上No商品名単価数量
    1鉛筆3010300
    1シャープペン25071750
    1ノート100252500
    2消しゴム5015750
    2ボールペン1503450
    3シャープペン25082000
    3ボールペン150304500
    3色鉛筆700128400
    3ノート100505000
    4消しゴム509450
    4ボールペン150213150
    5鉛筆3017510
    5消しゴム505250
  4. 「売上No」が4と5の行を抽出



初詣合格祈願SQL講座ページTOPに戻る