副問合せでは、まず括弧内から作成していきましょう。問18「商品番号‘’を注文した顧客の顧客名と住所を表示する」の作り方
1.「商品番号‘PX0’を注文した顧客」を副問合せで作る
SELECT 顧客番号 FROM 受注明細表
WHERE 商品番号 = ‘PX0’
2.「顧客の顧客名と住所を表示する」を作る(主問合せ)
SELECT 顧客名,顧客住所 FROM 顧客表
3.主問合せと副問合せをくっつける
SELECT 顧客名,顧客住所 FROM 顧客表
WHERE {?}
(SELECT 顧客番号 FROM 受注明細表
WHERE 商品番号 = ‘PX0’)
ここで{?}に何を入れるかですが、副問合せのSELECTで指定した列名と同じものがWHEREの列名で入ります。(これは結合と同じで、受注明細表と顧客表を顧客番号で結合するときのキーと同じです)そして、IN述語は「副問合せで選択された顧客番号のいずれか 」という条件で指定されます。
答え
SELECT 顧客名,顧客住所 FROM 顧客表
WHERE 顧客番号
IN (SELECT 顧客番号 FROM 受注明細表
WHERE 商品番号 = ‘PX0’)
miura