平成22年度 春期 データベーススペシャリスト試験 午前Ⅱ 問10
テクノロジ/データベース次のSQL文と同じ検索結果が得られるSQL文はどれか。 SELECT DISTINCT TBL1.COL1 FROM TBL1 WHERE COL1 IN (SELECT COL1 FROM TBL2)
出典:平成22年度 春期 データベーススペシャリスト試験 午前Ⅱ 問10
- アSELECT DISTINCT TBL1.COL1 FROM TBL1 UNION SELECT TBL2.COL1 FROM TBL2
- イSELECT DISTINCT TBL1.COL1 FROM TBL1 WHERE EXISTS (SELECT * FROM TBL2 WHERE TBL1.COL1 = TBL2.COL1)
- ウSELECT DISTINCT TBL1.COL1 FROM TBL1,TBL2 WHERE TBL1.COL1 = TBL2.COL1 AND TBL1.COL2 = TBL2.COL2
- エSELECT DISTINCT TBL1.COL1 FROM TBL1 LEFT OUTER JOIN TBL2 ON TBL1.COL1 = TBL2.COL1
正解:イ
解説
元のSQL文は,TBL2のCOL1列に存在する値と一致するTBL1.COL1の値を重複なく取得するものです。これは,TBL1の各行についてTBL2の中にCOL1が一致する行が存在するかどうかをEXISTSで判定し,存在する行のCOL1をDISTINCTで取得する書き方と同じ結果になります。
選択肢ごとの解説
- ア誤り。UNIONはTBL1とTBL2のCOL1を単純に合わせた集合を返すため,TBL2に存在しないTBL1のCOL1の値も結果に含まれてしまい,元のSQL文とは異なる結果になります。
- イ正しい。EXISTS句を用いてTBL1の各行についてTBL2にCOL1が一致する行が存在するかを判定する書き方は,元のIN句によるSQL文と同じ検索結果になります。
- ウ誤り。TBL1とTBL2をCOL1とCOL2の両方で結合しており,COL2の値によって結果が絞り込まれるため,COL1だけを条件とする元のSQL文とは異なる結果になる場合があります。
- エ誤り。LEFT OUTER JOINでは,TBL2に一致する行がないTBL1の行も結果に残るため,元のSQL文(IN条件を満たす行だけを取得する)とは異なる結果になります。