隣接リスト表からのリーフノード取得SQL

隣接リスト表において、 ・「子ノード」列には、木構造に存在するすべてのノード(A, B, C, D, E, F, G)が含まれます。 ・「親ノード」列には、子ノードを持つノード(NULL, A, B, C, F)が含まれます。 リーフノード(葉ノード)とは、「子ノードを持たないノード」のことです。 全ノードの集合(子ノード列)から、親ノードとなっているノードの集合(親ノード列)を差集合演算(EXCEPT)で差し引くことにより、子ノードを持たないノード(D, E, G)の集合が一意に取得できます。 よって、空欄  a  に入る字句は EXCEPT です。 INTERSECT(積集合)は、親ノードでもあり子ノードでもある中間ノード等(A, B, C, F)が抽出されてしまいます。 UNION(和集合)は、親ノードと子ノードのすべての重複を除いた集合(全ノード+NULL)が返されます。 UNION ALL(重複を許す和集合)は、全行がそのまま結合されて返されます。

図のツリー構造に対するデータを格納した“隣接リスト”表から,リーフノードを取得するSQL文の a に入れる字句はどれか。ここで,図の丸はノードを表し,矢印は親ノードから子ノードへの関係を表す。

sql
〔SQL文〕
SELECT 子ノード FROM 隣接リスト
   a 
SELECT 親ノード FROM 隣接リスト

〔隣接リスト〕

親ノード

子ノード

NULL

A

A

B

A

C

B

D

B

E

C

F

F

G

q8-figure-1
出典令和6年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問8
ア
EXCEPT
イ
INTERSECT
ウ
UNION
エ
UNION ALL