再帰的関連をもつ表のLEFT OUTER JOINによる自己結合

正解は「イ」です。 設問の要件を確認します。 検索の主対象はB1(部品名に'N11'が含まれる部品情報)。 B1の対象部品に親部品番号が設定されているときはその親部品(B2)の情報を返す。 親部品番号が設定されていない(親部品が存在しない)場合でも、B1の部品情報は残し、B2側の親部品情報をNULLとして返す。 このように「左側の表(B1)の行はすべて残し、結合条件を満たす右側の表(B2)の行が存在しない場合は右側をNULLで埋める」結合方式は、左外部結合(LEFT OUTER JOIN)です。 FROM句の指定は FROM 部品 B1 LEFT OUTER JOIN 部品 B2 となるため、  a  に入る字句は B1 LEFT OUTER JOIN 部品 B2 です。 INNER JOIN(単なるJOIN)を使用すると、親部品番号がNULLの部品(親を持たないルート部品)が結合結果から除外されてしまい、「設定されていない場合はNULLを返す」という要件を満たせません。 B1 RIGHT OUTER JOIN 部品 B2 とすると、右側(親部品B2)の行がすべて残り、B1がNULLで埋められてしまうため、対象部品の検索結果として逆になってしまいます。 B2 LEFT OUTER JOIN 部品 B1 とすると、B2(親側)が主表となり、B1(検索対象部品)が存在しない親部品まで抽出されてしまうため要件を満たせません。

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

〔SQL文〕

sql
SELECT B1.部品番号, B1.部品名,
 B2.部品番号 AS 親部品番号, B2.部品名 AS 親部品名
 FROM 部品  a 
 ON B1.親部品番号 = B2.部品番号
 WHERE B1.部品名 LIKE '%N11%'
出典平成30年春期 午前Ⅱ
ア
B1 JOIN 部品 B2
イ
B1 LEFT OUTER JOIN 部品 B2
ウ
B1 RIGHT OUTER JOIN 部品 B2
エ
B2 LEFT OUTER JOIN 部品 B1