ホーム > データベーススペシャリスト試験 > 2012年
データベーススペシャリスト試験 2012年 午前2 問11
“社員”表と“プロジェクト”表に対して, 次のSQL文を実行した結果はどれか。
SELECT プロジェクト番, 社員番号 FROM プロジェクト
WHERE 社員番号 IN
(SELECT 社員番号 FROM 社員 WHERE 部門 <= '2000')


ア:(正解)
イ:
ウ:
エ:
解説
SQLのIN句による絞り込み問題【午前2 解説】
要点まとめ
- 結論:社員表の部門が2000以下の社員番号を抽出し、プロジェクト表から該当社員のプロジェクト番号と社員番号を取得するSQL文の結果は選択肢アです。
- 根拠:IN句のサブクエリで部門が1000または2000の社員番号(11111, 22222)を抽出し、プロジェクト表の社員番号と照合しているためです。
- 差がつくポイント:IN句の使い方とサブクエリの条件理解、複数テーブルの関連付けを正確に把握できるかが重要です。
正解の理由
このSQL文は、社員表から「部門 <= '2000'」の条件を満たす社員番号をサブクエリで抽出し、その社員番号がプロジェクト表の社員番号に含まれる行を選択しています。社員表の部門が1000と2000の社員番号は11111と22222です。プロジェクト表でこれらの社員番号に該当する行はプロジェクト番号P001の2行です。したがって、選択肢アの表が正しい結果となります。
よくある誤解
部門の値を文字列として比較してしまい、数値としての大小関係を誤解することがあります。また、IN句のサブクエリの結果を正しく理解せず、全社員番号を対象にしてしまう誤りも多いです。
解法ステップ
- 社員表の「部門 <= '2000'」の条件を満たす社員番号を抽出する。
- 抽出された社員番号(11111, 22222)をIN句のリストとして扱う。
- プロジェクト表の社員番号がこのリストに含まれる行を選択する。
- 選択された行の「プロジェクト番号」と「社員番号」を結果として表示する。
選択肢別の誤答解説
- ア:正解。部門1000と2000の社員番号に該当するプロジェクト番号と社員番号を正しく抽出している。
- イ:部門2000以下の社員番号だけでなく、部門3000の社員番号も含まれているため誤り。
- ウ:部門3000の社員番号のみ抽出されており、条件に合わない。
- エ:部門4000の社員番号も含まれており、条件を満たしていない。
補足コラム
SQLのIN句はサブクエリの結果をリストとして扱い、指定した列の値がそのリストに含まれるかどうかで行を絞り込みます。文字列比較の場合、'2000'のようにクォーテーションで囲まれていても、数値として比較されることが多いですが、DBMSによって挙動が異なるため注意が必要です。
FAQ
Q: IN句のサブクエリで複数の値が返された場合、どう処理されますか?
A: サブクエリの結果はリストとして扱われ、IN句はそのリストに含まれるかどうかで行を絞り込みます。
A: サブクエリの結果はリストとして扱われ、IN句はそのリストに含まれるかどうかで行を絞り込みます。
Q: 部門の値が文字列でも数値比較は可能ですか?
A: 多くのDBMSは暗黙的に型変換を行い数値比較しますが、明示的に型を合わせることが望ましいです。
A: 多くのDBMSは暗黙的に型変換を行い数値比較しますが、明示的に型を合わせることが望ましいです。
関連キーワード: SQL, IN句, サブクエリ, 条件絞り込み, テーブル結合, 部門番号, プロジェクト管理