DBデータベーススペシャリスト試験 午前Ⅱ
令和3年度秋期 データベーススペシャリスト 午前Ⅱ 問8
問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。
問題

選択肢
- ア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条件と結果を読む視点
SQLの抽出結果を考えるときは、条件式だけでなく、対象行ごとに条件が評価される単位を整理し、結合やNULLなど結果に影響する要素を分けて確認しましょう。
この問題で問われていること
抽出条件が各行の値に対してどのように適用され、条件に関係する表や値の扱いが結果の集合へどう反映されるかという一点に絞って考えましょう。
視点
条件を読む際は、対象となる行と参照される値の関係を整理し、条件の評価単位、値が存在しない場合の扱い、複数条件の組合せを独立に確認します。
確認ポイント
- 各条件がどの行・列の値を参照しているか
- 条件を組み合わせたときの評価単位を整理できているか
- 値の不在や表の関係が結果に影響しないか
正解と解説を見る
正解
ア
解説
C1を左側として社員コードで結合し、C1がFE、C2がAPとなる組合せを得るには、結合条件に資格条件を含め、C1のFE行をWHERE句で残す必要がある。
理由
アは、社員コードが同じで、C1の資格がFE、C2の資格がAPという条件をON句に指定し、WHERE句でC1のFE行だけを抽出する。これにより、S001ではFEとAPが対応し、S002とS003では右側がNULLとなる結果になる。
比較
LEFT OUTER JOINでは、ON句の条件は右側との結合対象を決め、WHERE句の条件は結合後の行を絞り込む。C1側をFEに限定する条件をWHERE句に置くことで、提示された結果の行だけが残る。
選択肢ア(正解)
これは正解だよ。ON句で社員コードの一致に加えてC1をFE、C2をAPに限定し、WHERE句でC1のFE行を抽出している。LEFT OUTER JOINの左側をC1としたまま、S001のAPを対応させ、S002とS003にはC2側のNULLを表示できる。
選択肢イ
これは不正解だよ。WHERE C1.資格 IS NOT NULLでは、C1の資格がFEである行だけに限定されない。S001のAP・DB、S002のSM、S004のAPなどもC2側がNULLのまま残るため、提示結果にない余分な行が出力される。
選択肢ウ
これは不正解だよ。WHERE C2.資格 = 'AP'は、C2側がAPでない行や、LEFT OUTER JOINで対応行がなくNULLになった行を除外する。したがって、S002やS003のようにC2側がNULLとなる行が結果に残らず、提示された結果と一致しない。
選択肢エ
これは不正解だよ。社員コードだけで結合した後にWHERE句でC1をFE、C2をAPに絞り込む形であり、資格条件を結合条件として指定していない。WHERE句で右側NULLの行を除外するため、LEFT OUTER JOINの条件指定として求められる形にならない。
学習のポイント
LEFT OUTER JOINにおけるON句とWHERE句の役割の違いを理解する。
出典:独立行政法人 情報処理推進機構(IPA)令和3年度秋期 データベーススペシャリスト試験 午前Ⅱ 問8(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針