DBデータベーススペシャリスト試験 午前Ⅱ

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

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

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

選択肢

  1. ア
    SELECT DISTINCT TBL1.COL1 FROM TBL1 UNION SELECT TBL2.COL1 FROM TBL2
  2. イ
    SELECT DISTINCT TBL1.COL1 FROM TBL1 WHERE EXISTS (SELECT * FROM TBL2 WHERE TBL1.COL1 = TBL2.COL1)
  3. ウ
    SELECT DISTINCT TBL1.COL1 FROM TBL1、TBL2 WHERE TBL1.COL1 = TBL2.COL1 AND TBL1.COL2 = TBL2.COL2
  4. エ
    SELECT DISTINCT TBL1.COL1 FROM TBL1 LEFT OUTER JOIN TBL2 ON TBL1.COL1 = TBL2.COL1
解き方のヒントを見る

SQL抽出条件を読む一つの視点

抽出条件と結果の対応を考えるときは、条件式の各部分がどの行を対象にする意図なのかを分けて読み、境界値や空値、条件同士の関係を落ち着いて確認し、全体の意味も見直します。

この問題で問われていること

ここでは、複数の条件が組み合わされたときの論理的な関係だけに注目し、各条件を個別に読んだ後、全体として同時に満たす範囲を整理する順序を意識してください。

視点

抽出条件は、対象の選び方を表す複数の判断材料として捉えます。条件を一つずつ自然言語に置き換え、条件全体が要求している関係を図や短いメモで整理すると、結果との対応を検討しやすくなります。

確認ポイント

  • 各条件が示す対象範囲を個別に整理する
  • 条件同士が同時に求めている関係を確認する
  • 境界値や空値が判断に影響する可能性を見直す
正解と解説を見る

正解

イ

解説

元のSQL文は、TBL1のCOL1から重複を除き、TBL2にも同じCOL1が存在する値だけを抽出します。この存在条件をEXISTSで表した文が同じ結果になります。

理由

元のSQL文は、TBL1.COL1の値について、TBL2.COL1に等しい値が一つでも存在する場合だけ採用します。DISTINCTにより、TBL1側で同じ値が複数行あっても結果は一意の値になります。

比較

EXISTSは、相関条件でTBL1.COL1とTBL2.COL1を比較し、対応する行の存在だけを判定します。一方、UNIONは集合を追加し、追加条件のないLEFT OUTER JOINは対応しないTBL1の値も残すため、同じ結果にはなりません。

選択肢ア

これは不正解だよ。UNIONはTBL1のCOL1の集合にTBL2のCOL1の集合を追加する演算であり、両表に共通する値だけを抽出する条件ではありません。そのため、TBL2にしか存在しない値まで結果に含まれる可能性があります。

選択肢イ(正解)

これは正解だよ。EXISTSの相関サブクエリで、TBL1.COL1と等しいTBL2.COL1の行が存在するかを判定しています。元のIN条件と同じく、TBL1の値のうちTBL2にも存在するものだけを残し、DISTINCTで重複を除きます。

選択肢ウ

これは不正解だよ。COL1が一致することに加えて、TBL1.COL2とTBL2.COL2も一致することを要求しています。元のSQL文が比較するのはCOL1だけなので、COL2が異なる対応行は本来抽出される値まで除外される可能性があります。

選択肢エ

これは不正解だよ。LEFT OUTER JOINはTBL1の行を基準にするため、TBL2.COL1が一致しないTBL1の値も結果に残ります。元のIN条件はTBL2に一致する値だけを対象とするため、両者の検索結果は一致しません。

学習のポイント

IN副問合せとEXISTSによる存在判定、外部結合の結果範囲の違いを理解する。

出典:独立行政法人 情報処理推進機構(IPA)平成22年度春期 データベーススペシャリスト試験 午前Ⅱ 問10(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針