【詳細解説】■ 本問の核心・解法のポイント
本問は木構造(ツリー構造)を関係データベースで表現する隣接リストモデルと、SQLの集合演算子の性質を問う問題です。
ツリー構造において、「リーフノード(葉)」とは子を持たないノードのことです。
隣接リスト表の各行は「親ノード → 子ノード」の関係を表しています。
・子ノード列の値の集合:{A, B, C, D, E, F, G}
・親ノード列の値の集合:{NULL, A, B, C, F}
子ノード列に存在するノードのうち、自分自身が親ノードとして誰かの子を持っていないノード(=親ノード列に出現しないノード)がリーフノードとなります。図を確認すると、子を持たないノードは D, E, G です。
これをSQLで求めるには、「子ノードの集合」から「親ノードの集合」を差し引く差集合演算を行います。
・各選択肢の徹底解説:
・ア:【選択肢ア★】EXCEPTは差集合を求める演算子であり、「子ノードの集合 - 親ノードの集合」を求めることでリーフノードのみを正確に取得できます。
・イ:INTERSECTは積集合(共通部分)を求める演算子であり、根ノードとリーフ以外のノード(親でもあり子でもある中間ノード)が取得されます。
・ウ:UNIONは和集合(重複排除)を求める演算子であり、ツリー内の全ノードが取得されます。
・エ:UNION ALLは重複を排除しない和集合演算子であり、全ノードが出現回数分取得されます。
よって正解はアです。