IPA過去問ドリル

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

テクノロジ/データベース

次のSQL文と同じ検索結果が得られるSQL文はどれか。 SELECT DISTINCT TBL1.COL1 FROM TBL1  WHERE COL1 IN (SELECT COL1 FROM TBL2)

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

正解:イ

解説

元の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条件を満たす行だけを取得する)とは異なる結果になります。
データベーススペシャリストの過去問を演習モードで解く