データベーススペシャリスト 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
次のSQL文と同じ検索結果が得られるSQL文はどれか。【午前2 解説】
要点まとめ
- 結論:元のSQL文は「TBL1のCOL1がTBL2のCOL1に存在する行を抽出」しており、イのSQL文が同じ結果を返します。
- 根拠:元SQLは
WHERE COL1 IN (SELECT COL1 FROM TBL2)
で存在確認を行い、イはWHERE EXISTS
で同様の存在チェックを実施しています。 - 差がつくポイント:
IN
とEXISTS
の違いを理解し、UNION
やJOIN
の意味を正確に把握することが重要です。
正解の理由
元のSQL文はTBL1のCOL1の値がTBL2のCOL1に存在するかどうかを
イのSQL文は
また、両者とも
IN句で判定し、重複を除いて抽出しています。
イのSQL文は
EXISTS句を使い、TBL2にTBL1のCOL1と一致する行が存在するかをチェックしています。
EXISTSは条件に合う行があれば真となるため、元の
IN句と同じ意味を持ちます。
また、両者とも
DISTINCTで重複排除しているため、結果は完全に一致します。
よくある誤解
UNIONは2つのテーブルの値を結合する操作であり、元の
IN句の存在チェックとは異なります。
JOINは結合条件により行を増やす可能性があり、単純な存在チェックとは意味が違います。
解法ステップ
- 元SQL文の意味を理解する:「TBL1.COL1がTBL2.COL1に存在する行を抽出」
IN
句の役割を確認:サブクエリの結果に含まれるかどうかの存在確認- 選択肢のSQL文の動作を一つずつ検証
EXISTS
句は存在確認に使われ、IN
句と同等の結果を返すことを知るUNION
やJOIN
は結果の意味が異なるため除外- よってイが正解と判断する
選択肢別の誤答解説
- ア:
UNION
はTBL1とTBL2のCOL1の値を結合し、重複を除いた結果を返すため、元SQLの「TBL1の値がTBL2に存在する」条件とは異なります。 - イ:
EXISTS
句でTBL2にTBL1.COL1と一致する行が存在するかを判定し、元SQLと同じ結果を返します。 - ウ:
TBL1
とTBL2
を結合し、さらにCOL2
の一致も条件にしているため、元SQLより条件が厳しくなり結果が異なります。 - エ:
LEFT OUTER JOIN
はTBL1の全行を返し、TBL2に一致する行がなくてもNULLで返すため、元SQLの存在チェックとは異なります。
補足コラム
IN
句はサブクエリの結果に値が含まれるかを判定し、EXISTS
句はサブクエリの行の存在を判定します。- パフォーマンス面では、
EXISTS
の方が効率的な場合もありますが、結果は同じです。 JOIN
はテーブルを結合して行を増やす操作であり、単純な存在チェックとは用途が異なります。
FAQ
Q:
A: 結果は同じですが、データ量やインデックスの有無によってパフォーマンスが変わるため、状況に応じて使い分けます。
IN句と
EXISTS句はどちらを使うべきですか?
A: 結果は同じですが、データ量やインデックスの有無によってパフォーマンスが変わるため、状況に応じて使い分けます。
Q:
A: 複数のSELECT文の結果を結合し、重複を除いて一つの結果セットにまとめたい時に使います。
UNIONはどんな時に使いますか?
A: 複数のSELECT文の結果を結合し、重複を除いて一つの結果セットにまとめたい時に使います。
関連キーワード: SQL, サブクエリ、EXISTS句、IN句、JOIN, UNION, DISTINCT, データベース検索

\ せっかくなら /
データベーススペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

