戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

データベーススペシャリスト 2016年 午前2 問09


問題文

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

選択肢

ア:
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

🔒 解説は解答すると表示されます

IN句とEXISTS句の等価性【午前2解説】

正解の理由

元のSQL文はTBL1のCOL1の値がTBL2のCOL1に存在するかどうかをIN句で判定し、重複を除いて抽出しています。
イのSQL文はEXISTS句を使い、TBL2にTBL1のCOL1と一致する行が存在するかをチェックしています。EXISTSは条件に合う行があれば真となるため、元のIN句と同じ意味を持ちます。
また、両者ともDISTINCTで重複排除しているため、結果は完全に一致します。

解法ステップ

  1. 元SQL文の意味を理解する:「TBL1.COL1がTBL2.COL1に存在する行を抽出」
  2. IN句の役割を確認:サブクエリの結果に含まれるかどうかの存在確認
  3. 選択肢のSQL文の動作を一つずつ検証
  4. EXISTS句は存在確認に使われ、IN句と同等の結果を返すことを知る
  5. UNIONやJOINは結果の意味が異なるため除外
  6. よってイが正解と判断する

選択肢別の誤答解説

  • ア: UNIONはTBL1とTBL2のCOL1の値を結合し、重複を除いた結果を返すため、元SQLの「TBL1の値がTBL2に存在する」条件とは異なります。
  • イ: EXISTS句でTBL2にTBL1.COL1と一致する行が存在するかを判定し、元SQLと同じ結果を返します。
  • ウ: TBL1とTBL2を結合し、さらにCOL2の一致も条件にしているため、元SQLより条件が厳しくなり結果が異なります。
  • エ: LEFT OUTER JOINはTBL1の全行を返し、TBL2に一致する行がなくてもNULLで返すため、元SQLの存在チェックとは異なります。

よくある誤解

UNIONは2つのテーブルの値を結合する操作であり、元のIN句の存在チェックとは異なります。
JOINは結合条件により行を増やす可能性があり、単純な存在チェックとは意味が違います。

補足コラム

  • IN句はサブクエリの結果に値が含まれるかを判定し、EXISTS句はサブクエリの行の存在を判定します。
  • パフォーマンス面では、EXISTSの方が効率的な場合もありますが、結果は同じです。
  • JOINはテーブルを結合して行を増やす操作であり、単純な存在チェックとは用途が異なります。

FAQ

Q: IN句とEXISTS句はどちらを使うべきですか?
A: 結果は同じですが、データ量やインデックスの有無によってパフォーマンスが変わるため、状況に応じて使い分けます。
Q: UNIONはどんな時に使いますか?
A: 複数のSELECT文の結果を結合し、重複を除いて一つの結果セットにまとめたい時に使います。

関連キーワード: SQL, サブクエリ、EXISTS句、IN句、JOIN, UNION, DISTINCT, データベース検索
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

データベーススペシャリストを
クイズ形式で学習しませんか?

クイズ画面へ遷移する→

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について