平成30年度 春期 午前Ⅱ 問8
データ操作
NULLに関する問題
“部品”表から,部品名に‘N11’が含まれる部品情報(部品番号,部品名)を検索するSQL文がある。このSQL文は,検索対象の部品情報のほか,対象部品に親部品番号が設定されている場合は親部品情報を返し,設定されていない場合はNULLを返す。aに入れる字句はどれか。ここで,実線の下線は主キーを表す。
部品(部品番号,部品名,親部品番号)
〔SQL文〕
SELECT B1.部品番号, B1.部品名,
B2.部品番号 AS 親部品番号, B2.部品名 AS 親部品名
FROM 部品 [ a ]
ON B1.親部品番号 = B2.部品番号
WHERE B1.部品名 LIKE '%N11%'- アB1 JOIN 部品 B2
- イB1 LEFT OUTER JOIN 部品 B2
- ウB1 RIGHT OUTER JOIN 部品 B2
- エB2 LEFT OUTER JOIN 部品 B1
答えと解説を見る
✓ これが正解イB1 LEFT OUTER JOIN 部品 B2
解説
B1の行を全部残し、親が無ければNULLを付ける左外結合です。
見分ける軸は、どちらの表の行を必ず残すかです。この問合せでは、部品名にN11を含む部品B1を全部返し、親部品があればその情報を、なければNULLを並べる必要があります。B1 LEFT OUTER JOIN 部品 B2と書くと、左側のB1の行は、ON句の条件に合うB2の行がなくても結果に残り、そのときB2の列はNULLになります。親部品番号が設定されていない部品でも、部品番号と部品名が返り、親部品の欄がNULLになります。同じ表に別名を付けて親子をつなぐ形でも、残したい側を左に置いて左外結合にする、という考え方は変わりません。
ほかの選択肢はなぜ違うのか
- アB1 JOIN 部品 B2:JOINだけの内結合では、ON句の条件に合う組だけが結果に残ります。親部品番号が設定されていない部品はB2の相手が見つからないので、その部品そのものが結果から消えてしまいます。
- ウB1 RIGHT OUTER JOIN …:右外結合では、右側のB2の行が必ず残ります。親を持たない部品B1は残らず、B1の列がNULLになった行もWHERE句の部品名の条件で外れるので、結果は内結合と同じになります。
- エB2 LEFT OUTER JOIN 部…:B2を左に置いた左外結合では、残るのは親部品の側の行です。親を持たないB1の部品は残らず、B1がNULLの行はWHERE句で外れるため、親部品番号がない部品の行が返りません。
出典:平成30年度 春期 データベーススペシャリスト試験 午前Ⅱ 問8
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)