ホーム > データベーススペシャリスト試験 > 2016年

データベーススペシャリスト試験 2016年 午前209


次の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文はどれか

---

## 問題のSQL文
```sql
SELECT DISTINCT TBL1.COL1 FROM TBL1
WHERE COL1 IN (SELECT COL1 FROM TBL2)
このSQL文が行っている処理を整理すると、
  • TBL1テーブルのCOL1の値のうち、
  • TBL2テーブルのCOL1の値に含まれているものを抽出し、
  • 重複を除いて表示する
ということです。
つまり、「TBL1.COL1 の値が、TBL2.COL1 の中に存在するかどうか」を判定して結果を取得しています。

選択肢の分析

選択肢ア:

SELECT DISTINCT TBL1.COL1 FROM TBL1
UNION SELECT TBL2.COL1 FROM TBL2
  • これはTBL1.COL1とTBL2.COL1の両方の値を合わせて重複なく列挙します。
  • つまり、TBL1にもTBL2にも存在する値に限定せず、両方の全ての値が結果に含まれます。
  • よって、問題文とは異なる結果となり誤り。

選択肢イ:

SELECT DISTINCT TBL1.COL1 FROM TBL1
WHERE EXISTS
    (SELECT * FROM TBL2 WHERE TBL1.COL1 = TBL2.COL1)
  • WHERE句の EXISTSで、
  • 「TBL2の中にTBL1と同じCOL1 を持つ行が存在する」かをチェックしている。
  • つまり、問題文の IN と同じ意味を持ちます。
  • 重複を除く点も問題文に一致。
  • よって、問題文と同じ結果を返す正解のSQL文。

選択肢ウ:

SELECT DISTINCT TBL1.COL1 FROM TBL1, TBL2
WHERE TBL1.COL1 = TBL2.COL1
AND TBL1.COL2 = TBL2.COL2
  • TBL1とTBL2の全組み合わせのうち、COL1だけでなくCOL2も一致する行を抽出。
  • しかし問題文はCOL2については無条件なので、この条件は余分かつ厳しすぎる。
  • 結果が一致しない。

選択肢エ:

SELECT DISTINCT TBL1.COL1 FROM TBL1 LEFT OUTER JOIN TBL2
ON TBL1.COL1 = TBL2.COL1
  • LEFT OUTER JOINは、TBL1の行すべてを出力し、TBL2の一致する行を結合。
  • そのため、TBL2に無いCOL1も出てきてしまう。
  • 問題文のIN句の意味「TBL2に存在すること」とは異なる。

まとめ

選択肢説明結果の一致
両テーブルのCOL1の結合(和)×
EXISTSによるサブクエリの存在チェック(等価)
追加条件があり過ぎ(COL2条件)×
LEFT JOINによる全TBL1行取得(フィルター不足)×

参考情報: SQLのIN句とEXISTSの関係

  • COL1 IN (SELECT COL1 FROM TBL2)
  • EXISTS (SELECT * FROM TBL2 WHERE TBL1.COL1 = TBL2.COL1)同じ意味を持ちます。
  • パフォーマンスはDBMSによるが、論理的には同等の結果になるため置き換えが可能。

以上より、正解は です。
← 前の問題へ次の問題へ →

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