平成30年度 春期 データベーススペシャリスト試験 午前Ⅱ 問8
テクノロジ/データベース“部品”表から,部品名に'N11'が含まれる部品情報(部品番号,部品名)を検索するSQL文がある。このSQL文は,検索対象の部品情報のほか,対象部品に親部品番号が設定されている場合は親部品情報を返し,設定されていない場合はNULLを返す。aに入れる字句はどれか。ここで,実線の下線は主キーを表す。 部品(部品番号,部品名,親部品番号) 〔SQL文〕 SELECT B1.部品番号, B1.部品名, B2.部品番号 AS 親部品番号, B2.部品名 AS 親部品名 FROM 部品 [ a ] ON B1.親部品番号 = B2.部品番号 WHERE B1.部品名 LIKE '%N11%'
出典:平成30年度 春期 データベーススペシャリスト試験 午前Ⅱ 問8
- アB1 JOIN 部品 B2
- イB1 LEFT OUTER JOIN 部品 B2
- ウB1 RIGHT OUTER JOIN 部品 B2
- エB2 LEFT OUTER JOIN 部品 B1
正解:イ
解説
SELECT句でB1,B2の両方の部品情報を参照しつつ,親部品が存在しない部品についてはB2側の列をNULLとして返す必要があるため,検索対象であるB1の行を必ず残す外部結合,すなわちB1を基準としたLEFT OUTER JOINを用いる必要があります。
選択肢ごとの解説
- ア誤り。単純な内部結合(JOIN)では,親部品番号が設定されていない部品(B2側に対応する行がない部品)は結果から除外されてしまい,NULLを返すという要件を満たせません。
- イ正しい。B1 LEFT OUTER JOIN 部品 B2 とすることで,B1側(検索対象の部品)は必ず結果に残り,対応する親部品(B2)が存在しない場合はB2側の列がNULLとして返されます。
- ウ誤り。B1 RIGHT OUTER JOIN 部品 B2 とすると,B2側(部品全体)が基準になって残ってしまい,B1側の検索条件(部品名にN11を含む)を満たさない行まで結果に含まれ得るため,意図した検索になりません。
- エ誤り。B2 LEFT OUTER JOIN 部品 B1 とすると,B2側(親部品候補となる部品全体)が基準になって残ってしまい,B1.部品名の検索条件による絞り込みが正しく機能しません。