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

データベーススペシャリスト 2010年 午前2 問10


問題文

次の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と一致する行が存在するかをチェックしており、IN句と同じ意味を持ちます。
したがって、イのSQLが元のSQLと同じ検索結果を返します。

解法ステップ

  1. 元のSQLの意味を理解する:「TBL1.COL1がTBL2.COL1に存在する行を抽出」
  2. IN句の条件をEXISTS句に置き換えられるか検討する
  3. UNIONやJOINが条件に合致するかを確認し、結果の違いを考える
  4. 条件が完全に一致するSQLを選択する

選択肢別の誤答解説

  • ア: UNIONはTBL1.COL1とTBL2.COL1の全ての値を結合し重複排除するため、元のSQLの条件とは異なります。
  • イ: EXISTS句でTBL2に該当するCOL1が存在するかを判定し、元のIN句と同じ意味になるため正解です。
  • ウ: JOINでCOL1とCOL2の両方を条件にしているため、元のSQLの条件(COL1のみ)と異なり、結果が変わります。
  • エ: LEFT OUTER JOINはTBL1の全行を保持しつつ結合するため、TBL2に存在しない行も含まれ、元のSQLと異なります。

よくある誤解

IN句とEXISTS句は似ていますが、UNIONやJOINを使うと結果が変わることがあります。
特にJOINは結合条件が増えると行数が増減しやすく、元の条件と異なる結果になることが多いです。

補足コラム

IN句とEXISTS句はどちらもサブクエリの結果を条件に使いますが、パフォーマンスやNULLの扱いで違いが出ることがあります。
一般的に、EXISTSは存在確認に適し、大量データのサブクエリでは効率的な場合があります。
また、JOINは結合結果の行数が増減するため、単純な存在チェックには向きません。

FAQ

Q: IN句とEXISTS句はどちらが速いですか?
A: データベースやデータ量によりますが、EXISTSは存在確認に特化しており、大量データでは高速な場合があります。
Q: UNIONはどんな時に使いますか?
A: 複数のSELECT結果を結合し、重複を排除したい時に使います。条件の絞り込みには不向きです。
Q: LEFT OUTER JOINとINNER JOINの違いは?
A: LEFT OUTER JOINは左テーブルの全行を保持し、右テーブルに一致しない場合はNULLを補う。INNER JOINは両テーブルの条件に合致する行のみ抽出します。

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

\ せっかくなら /

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

クイズ画面へ遷移する→

すぐに利用可能!

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

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