DBデータベーススペシャリスト試験 午前Ⅱ
平成31年度春期 データベーススペシャリスト 午前Ⅱ 問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抽出条件を結果に結び付ける視点
SQLの抽出条件と結果の対応を考えるときは、条件が各行を対象にする観点に絞り、条件の組み合わせ方と対象列の値を落ち着いて照合します。答えを決め打ちせず、結果に現れる行の特徴を確認しましょう。
この問題で問われていること
確認の中心は、抽出条件を構成する各要素が、行を残す判断にどう関係するかです。条件同士の結び付きと比較対象の列を見比べ、結果に含まれる行との対応を整理してください。
視点
抽出条件を読む際は、条件が参照する列と比較の単位を捉え、条件全体が各行の採否へ与える影響を整理します。結果側では、含まれる行に共通する特徴と条件との対応関係を観察しましょう。
確認ポイント
- 条件が参照している列と値の種類を確認する
- 複数の条件がある場合、それぞれの関係を整理する
- 結果に現れる行の共通点と条件の対応を見直す
正解と解説を見る
正解
ア
解説
LEFT OUTER JOINでC1側のFE取得者を全員残し、C2側に同じ社員コードのAPがある場合だけ資格2を表示するには、資格条件の一部をON句に置き、C1側の対象をWHERE句で指定する。
正答の理由
正答はア。ON句で社員コードの一致に加えてC1をFE、C2をAPに限定し、WHERE句でC1のFE行だけを選ぶ。C2にAPがないS002とS003は、C2資格がNULLのまま残り、S001だけはAPが表示されるため、示された結果と一致する。
比較の要点
LEFT OUTER JOINの右表側条件をWHERE句に置くと、右表がNULLになった行まで除外される。したがって、対応するAPがない社員も残したい場合は、APという条件をON句で指定する必要がある。
選択肢ア(正解)
これは正解だよ。ON句で社員コードを一致させた上で、C1をFE、C2をAPに限定している。さらにWHERE句でC1のFE行だけを残すため、APがないS002とS003も左外部結合によって残り、C2資格はNULLになる。
選択肢イ
これは不正解だよ。ON句の条件自体は同じだが、WHERE句がC1資格のNULL判定だけになっている。そのためC1のAPやDBなど、FEではない資格行も除外されず、結果に余分な社員資格が含まれてしまう。
選択肢ウ
これは不正解だよ。WHERE句でC2資格がAPの行だけを残すため、C2に対応するAPがないS002とS003は、左外部結合でNULLになった後に除外される。したがって、結果に必要なNULL行が得られない。
選択肢エ
これは不正解だよ。ON句では社員コードだけを一致させ、FEとAPの条件をWHERE句で指定している。WHERE句でC2資格がAPに限定されるため、対応するAPがないS002とS003が除外され、LEFT OUTER JOINの効果を失う。
学習のポイント
LEFT OUTER JOINでは、結合条件をON句に置くかWHERE句に置くかで、対応行のない左表行が残るかどうかが変わる。
出典:独立行政法人 情報処理推進機構(IPA)平成31年度春期 データベーススペシャリスト試験 午前Ⅱ 問11(公式資料:問題冊子(PDF) / 解答例)
関連する過去問一覧
IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針