平成22年度 春期 基本情報技術者試験 午前 問31
テクノロジ/データベース“商品”表,“在庫”表に対する次のSQL文と,同じ結果が得られるSQL文はどれか。ここで,下線部は主キーを表す。 SELECT 商品番号 FROM 商品 WHERE 商品番号 NOT IN (SELECT 商品番号 FROM 在庫) 〔商品〕商品番号,商品名,単価 〔在庫〕在庫番号,商品番号,在庫数
出典:平成22年度 春期 基本情報技術者試験 午前 問31
- アSELECT 商品番号 FROM 在庫 WHERE EXISTS (SELECT 商品番号 FROM 商品)
- イSELECT 商品番号 FROM 在庫 WHERE NOT EXISTS (SELECT 商品番号 FROM 商品)
- ウSELECT 商品番号 FROM 商品 WHERE EXISTS (SELECT 商品番号 FROM 在庫 WHERE 商品.商品番号 = 在庫.商品番号)
- エSELECT 商品番号 FROM 商品 WHERE NOT EXISTS (SELECT 商品番号 FROM 在庫 WHERE 商品.商品番号 = 在庫.商品番号)
正解:エ
解説
設問のSQL文は,「在庫」表に存在しない商品番号を「商品」表から抽出するものです。同じ結果を得るには,「商品」表を基準に,商品番号が一致する行が「在庫」表に存在しないことをNOT EXISTSと相関副問合せ(商品.商品番号=在庫.商品番号)で判定する必要があります。
選択肢ごとの解説
- ア誤り。FROM句が「在庫」になっており,抽出対象が「商品」表の商品番号ではなく「在庫」表の商品番号になっています。
- イ誤り。FROM句が「在庫」になっているうえ相関条件もなく,設問のSQL文とは異なる結果になります。
- ウ誤り。EXISTSを使っており,「在庫」に存在する商品番号を抽出することになるため,「在庫にない」商品番号を求める設問のSQL文とは逆の結果になります。
- エ正しい。FROM句が「商品」であり,NOT EXISTSと相関条件(商品.商品番号=在庫.商品番号)を用いることで,在庫にない商品番号を抽出でき,設問のSQL文と同じ結果になります。