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

データベーススペシャリスト試験 2015年 午前208


問題文

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

選択肢

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 C1.資格 ='AP'
ON C1.社員コード = C2.社員コード
WHERE C1.資格 = 'FE' AND C2.資格 = 'AP'

社員取得資格表に対するSQL文の字句選択【午前2 解説】

要点まとめ

  • 結論:正解はアで、LEFT OUTER JOINのON句とWHERE句の条件設定が適切です。
  • 根拠:社員コードごとに資格「FE」を資格1に、「AP」を資格2に割り当てるため、JOIN条件で両資格を指定し、WHERE句で資格1を「FE」に限定しています。
  • 差がつくポイント:JOINのON句に両資格条件を入れ、WHERE句で資格1を限定することで、資格2がNULLでもFE資格の社員を漏らさず抽出できる点が重要です。

正解の理由

アのSQL文は、社員コードをキーにして社員取得資格表を2回参照し、C1で資格「FE」、C2で資格「AP」を取得しているかを判定しています。
LEFT OUTER JOINを使うことで、資格「AP」を持たない社員も資格1「FE」は表示され、資格2はNULLとなります。
WHERE句でC1.資格 = 'FE'を指定することで、資格1が「FE」の社員だけを抽出し、結果表の要件に合致します。

よくある誤解

JOINの条件をON句に入れるべきかWHERE句に入れるべきか混同し、INNER JOINのような結果になる誤りが多いです。
資格2がNULLになるケースを考慮せず、WHERE句でC2.資格を条件にすると該当行が除外されてしまいます。

解法ステップ

  1. 社員コードごとに資格「FE」と「AP」を別々の列に並べるため、自己結合を考える。
  2. LEFT OUTER JOINを使い、資格「FE」を持つ社員を基準にする。
  3. ON句で社員コードが一致し、C1が「FE」、C2が「AP」である条件を指定。
  4. WHERE句でC1の資格を「FE」に限定し、資格1列を「FE」の社員に絞る。
  5. 資格2がない場合はNULLとなるため、LEFT OUTER JOINの特性を活かす。

選択肢別の誤答解説

  • ア: 正解。ON句で両資格条件を指定し、WHERE句で資格1を「FE」に限定している。
  • イ: WHERE句でC1.資格 IS NOT NULLとしたため、資格1が「FE」以外も含まれ、結果が異なる。
  • ウ: WHERE句でC1.資格 = 'AP'としたため、資格1が「AP」の社員のみ抽出され、問題の結果と合わない。
  • エ: ON句に資格条件を入れず、WHERE句でC2.資格 = 'AP'を指定したため、LEFT OUTER JOINの意味が薄れ、資格2がNULLの行が除外される。

補足コラム

SQLの自己結合は、同じテーブルを別名で複数回参照し、異なる条件でデータを比較・結合する際に有効です。
LEFT OUTER JOINは左側のテーブルの行をすべて保持し、右側のテーブルに該当がなければNULLを返すため、欠損データの扱いに適しています。
ON句に結合条件を入れ、WHERE句は結果の絞り込みに使うという基本ルールを理解しておくことが重要です。

FAQ

Q: なぜ資格2がNULLの社員も結果に含まれるのですか?
A: LEFT OUTER JOINを使い、資格1「FE」を基準にしているため、資格2「AP」がない社員も資格1は表示され、資格2はNULLになります。
Q: ON句とWHERE句の条件はどのように使い分けるべきですか?
A: ON句はテーブル結合の条件を指定し、WHERE句は結合後の結果の絞り込みに使います。ON句に条件を入れないと結合結果が変わることがあります。
Q: INNER JOINとLEFT OUTER JOINの違いは何ですか?
A: INNER JOINは両テーブルにマッチする行のみを返しますが、LEFT OUTER JOINは左テーブルの全行を返し、右テーブルにマッチしない場合はNULLを返します。

関連キーワード: SQL, 自己結合、LEFT OUTER JOIN, 資格管理、テーブル結合、ON句、WHERE句、NULL処理
← 前の問題へ次の問題へ →

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

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