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

データベーススペシャリスト試験 2019年 午前211


問題文

“社員取得資格”表に対し、SQL文を実行して結果を得た。SQL文のaに入れる字句はどれか。
データベーススペシャリスト試験 2019年 午前2 問11の問題画像

選択肢

ON C1.社員コード = C2.社員コード
    AND C1.資格 = 'FE' AND C2.資格 = 'AP'
WHERE C1.資格 = 'FE'
(正解)
ON C1.社員コード = C2.社員コード
    AND C1.資格 = 'FE' AND C2.資格 = 'AP'
WHERE C1.資格 IS NOT NULL
ON C1.社員コード = C2.社員コード
    AND C1.資格='FE' AND C2.資格='AP'
WHERE C2.資格='AP'
ON C1.社員コード = C2.社員コード
WHERE C1.資格='FE' AND C2.資格='AP'

社員取得資格表のSQL結合条件問題【午前2 解説】

要点まとめ

  • 結論:正解はアで、JOIN条件に資格の具体的な値を指定し、WHERE句でC1の資格を絞る構成が正しいです。
  • 根拠:LEFT OUTER JOINでC1の資格「FE」を基準にし、C2の資格「AP」を結合条件に含めることで、資格1と資格2を正しく並べられます。
  • 差がつくポイント:JOIN条件とWHERE句の使い分け、NULLを含むデータの扱い、資格の組み合わせを正確に表現できるかが重要です。

正解の理由

正解のアは、C1とC2の社員コードが一致し、かつC1の資格が「FE」、C2の資格が「AP」であることをJOIN条件に含めています。さらにWHERE句でC1の資格を「FE」に限定しているため、C1の資格「FE」を基準に資格1、資格2を並べる結果が得られます。これにより、資格1が「FE」、資格2が「AP」の組み合わせが正しく抽出され、問題の結果表と一致します。

よくある誤解

JOIN条件に資格の値を入れずにWHERE句で絞ると、LEFT OUTER JOINの意味が失われ、NULLを含む行が除外されることがあります。これにより期待する結果が得られません。

解法ステップ

  1. 社員コードでC1とC2を結合する基本条件を設定する。
  2. 資格1を「FE」に固定し、資格2を「AP」に限定する条件をJOIN句に含める。
  3. WHERE句でC1の資格を「FE」に絞り、資格1の基準を明確にする。
  4. LEFT OUTER JOINを使い、資格2が存在しない場合はNULLを許容する。
  5. 実行結果が問題の結果表と一致するか確認する。

選択肢別の誤答解説

  • ア: 正解。JOIN条件とWHERE句の使い分けが適切で、期待通りの結果を得られる。
  • イ: WHERE句で「C1.資格 IS NOT NULL」としているため、「FE」以外の資格も含まれ、結果が異なる。
  • ウ: WHERE句で「C2.資格='AP'」と指定すると、LEFT OUTER JOINの意味がなくなり、資格2がNULLの行が除外される。
  • エ: JOIN条件に資格の値を指定せず、WHERE句で両方の資格を指定すると、INNER JOINと同様の動作になり、NULL行が除外される。

補足コラム

LEFT OUTER JOINは左側テーブルの全行を保持し、右側テーブルの結合条件に合致しない場合はNULLを補完します。JOIN条件に具体的な値を含めることで、結合の粒度を細かく制御でき、複数の資格を列として並べる際に有効です。

FAQ

Q: LEFT OUTER JOINとINNER JOINの違いは何ですか?
A: INNER JOINは両テーブルの結合条件に合致する行のみを抽出しますが、LEFT OUTER JOINは左テーブルの全行を保持し、右テーブルに合致しない場合はNULLを補います。
Q: なぜ資格の条件をJOIN句に入れる必要があるのですか?
A: JOIN句に条件を入れることで、結合の対象となる行を限定し、期待する組み合わせを正確に抽出できます。WHERE句で条件を指定すると、結合後の行を絞り込むため、LEFT OUTER JOINの効果が失われることがあります。

関連キーワード: SQL JOIN, LEFT OUTER JOIN, 結合条件、資格管理、データベース設計、SQL文法、NULL処理
← 前の問題へ次の問題へ →

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

プライバシーポリシー利用規約開発者について