過去問解きまくり研究所 ホーム

平成22年度 春期 午前Ⅱ 問10

データ操作

副問合せに関する問題

次の SQL 文と同じ検索結果が得られる SQL 文はどれか。

SELECT DISTINCT TBL1.COL1 FROM TBL1
        WHERE COL1 IN (SELECT COL1 FROM TBL2)
答えと解説を見る

✓ これが正解イSELECT DISTINCT TBL1.COL1 FROM TBL1 WHERE EXISTS (SELECT * FROM TBL2 WHERE TBL1.COL1 = TBL2.COL1)

解説

IN の副問合せは、EXISTS を使った相関副問合せに書き換えられます。

元の SQL 文は、TBL1 の COL1 のうち、TBL2 の COL1 に同じ値があるものを重複なく取り出します。EXISTS を使った文では、TBL1 の各行について、TBL2 に TBL1.COL1 = TBL2.COL1 となる行が一つでもあるかを調べ、あればその行を残します。外側の行の値を内側の条件で参照する相関副問合せの形ですが、残る行の条件は IN を使った場合と同じで、DISTINCT で重複も除くので結果は一致します。IN と EXISTS の書換えでは、内側の条件が結合列の一致だけになっているか、余計な条件や行の追加がないかを確かめると判断できます。

ほかの選択肢はなぜ違うのか

出典:平成22年度 春期 データベーススペシャリスト試験 午前Ⅱ 問10

この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)