DBデータベーススペシャリスト試験 午前Ⅱ

平成30年度春期 データベーススペシャリスト 午前Ⅱ 問8

問題文と選択肢を読んで答えを考えてから、下の「正解と解説を見る」で確認しましょう。

問題

“部品”表から,部品名に‘N11’が含まれる部品情報(部品番号,部品名)を検索するSQL文がある。このSQL文は,検索対象の部品情報のほか,対象部品に親部品番号が設定されている場合は親部品情報を返し,設定されていない場合はNULLを返す。aに入れる字句はどれか。ここで,実線の下線は主キーを表す。 部品(部品番号,部品名,親部品番号) 主キー:部品番号 SELECT B1.部品番号,B1.部品名, B2.部品番号 AS 親部品番号,B2.部品名 AS 親部品名 FROM 部品 a ON B1.親部品番号 = B2.部品番号 WHERE B1.部品名 LIKE '%N11%'

選択肢

  1. ア
    B1 JOIN 部品 B2
  2. イ
    B1 LEFT OUTER JOIN 部品 B2
  3. ウ
    B1 RIGHT OUTER JOIN 部品 B2
  4. エ
    B2 LEFT OUTER JOIN 部品 B1
解き方のヒントを見る

抽出条件を読む一つの視点

SQLの抽出結果を考えるときは、条件が各行のどの列の値に対して評価されるかという対応関係だけに注目し、処理の順序や表示される列と混同しないよう整理しましょう。特に境界値や空欄の扱いは、問題の記述に沿って丁寧に確認します。

この問題で問われていること

確認の中心は、抽出条件を行ごとに当てはめたとき、比較対象となる列・値・論理条件の組み合わせが読み取れるかです。結果の件数や並びを先に決めず、各条件の成立状況を表にして見比べます。

視点

抽出は、保存された行の情報と指定された条件を対応づけて、条件との関係を検討する作業です。列の役割、値の型、NULLや境界の扱い、条件同士のつながりを分けて読むと、結果の解釈を整理しやすくなります。

確認ポイント

  • 条件が参照する列と、各行が持つ値を対応させて確認する
  • 空欄や境界に関する記述がある場合は、通常の値と分けて扱う
  • 複数条件がある場合は、それぞれの成立状況と結び付きを整理する
正解と解説を見る

正解

イ

解説

対象部品を必ず検索結果に残し、親部品が存在する場合だけ親部品の情報を結合するには、対象側を基準にした左外部結合を用いる。

理由

B1は検索対象となる部品、B2はB1の親部品として同じ部品表を別名で参照している。B1.親部品番号とB2.部品番号が一致すれば親部品情報を取得し、一致しなければB2側の列をNULLにする必要がある。

比較

B1を左側に置くLEFT OUTER JOINなら、親部品番号が未設定または対応する親部品がない場合でもB1の行が残る。通常のJOINではその行が除外され、RIGHT OUTER JOINや表の左右を逆にした指定では保持すべき対象側が適切でない。

選択肢ア

これは不正解だよ。通常のJOINは内部結合であり、B1の親部品番号に対応するB2の部品番号が見つからない行を結果から除外する。親部品番号が設定されていない場合はNULLを返すという条件を満たせない。

選択肢イ(正解)

これは正解だよ。B1を検索対象の部品、B2を親部品として左外部結合するため、B1の行は必ず結果に残る。親部品が見つかる場合はB2の情報を返し、見つからない場合はB2の列にNULLを返せる。

選択肢ウ

これは不正解だよ。右外部結合では右側のB2の行を保持するため、親部品側を基準にした結果になる。検索対象であるB1を必ず残し、親部品がないときにNULLを返すという要件に合わない。

選択肢エ

これは不正解だよ。B2を左側、B1を右側に置くと、左外部結合で保持されるのは親部品側のB2になる。検索対象のB1を基準にして、親部品情報がない場合だけNULLを返す構造になっていない。

学習のポイント

自己結合と外部結合における、結合元行の保持条件を理解する。

出典:独立行政法人 情報処理推進機構(IPA)平成30年度春期 データベーススペシャリスト試験 午前Ⅱ 問8(公式資料:問題冊子(PDF) / 解答例)

関連する過去問一覧

IPA Advancedは非公式の学習サイトです。解説にはAIによる補助生成を含む場合があります。公式の問題冊子・解答例・採点講評を優先し、誤りは確認後に訂正します。運営・編集方針