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

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


“社員取得資格”表に対し, SQL文を実行して結果を得た。SQL文のaに入る字句はどれか。
問題画像
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 がやりたいこと

  • 左外部結合 (LEFT OUTER JOIN) を使って
    社員取得資格 表を 同じ表 C1・C2 に自己結合
  • 目的は
    1. 資格1 として “FE” を持つ行を抽出
    2. 同じ社員に “AP” があれば 資格2 に表示,無ければ NULL
得られた結果(S001 は FE と AP,S002/S003 は AP が無い)は
まさに “FE 行を主にして AP 行を左外部結合” した形です。
社員コード | 資格1 | 資格2
-----------+-------+--------
S001       | FE    | AP
S002       | FE    | NULL
S003       | FE    | NULL

正しく書ける結合条件と WHERE

SELECT
    C1.社員コード,
    C1.資格  AS 資格1,
    C2.資格  AS 資格2
FROM  社員取得資格 C1
LEFT OUTER JOIN 社員取得資格 C2         -- 自己結合
     ON  C1.社員コード = C2.社員コード   -- 同一社員
     AND C1.資格 = 'FE'                 -- C1 は FE
     AND C2.資格 = 'AP'                 -- C2 は AP (あれば)
WHERE C1.資格 = 'FE';                   -- FE 行だけを出力
  • ON 句 に “C2.資格 = 'AP'” を入れることで
    AP を持たない社員は C2 側が NULL になる (LEFT JOIN の効用)。
  • WHERE 句 には C1.資格 = 'FE' だけを書く。
    もし C2.資格='AP' を WHERE に書くと NULL 行が落ちてしまい
    S002/S003 が出力されなくなるので NG。

選択肢との対応

選択肢JOIN 句 & WHERE 句判定
ON … AND C1.資格='FE' AND C2.資格='AP'
WHERE C1.資格='FE'
正しい組合せ
WHERE C1.資格 IS NOT NULLNG (DB,AP 行も混ざる)
WHERE C2.資格='AP'NG (AP 無い社員が消える)
WHERE C1.資格='FE' AND C2.資格='AP'NG (AP 無い社員が消える)

結論

a に入る正しい SQL 句は 選択肢「ア」 である。
← 前の問題へ次の問題へ →

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