SkillStack
テクノロジ系8 / 25問

データベーススペシャリスト試験 令和6年度 秋期 午前II 問8

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

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

データベーススペシャリスト試験 令和6年度 秋期 午前II 問8の図表

選択肢を押すと答え合わせができます。

正解と解説を見る

【正解】ア

リーフノードとは、子を一つももたない末端のノードです。隣接リストの子ノード列にはA、B、C、D、E、F、Gが現れます。一方、親ノード列に現れる実際のノードはA、B、C、Fです。したがって、子ノードの集合から親ノードの集合を除けば、親として一度も現れないD、E、Gが残り、これらがリーフノードです。

EXCEPTは、前の問合せ結果から後ろの問合せ結果に含まれる行を取り除く差集合演算です。そのため、aにEXCEPTを入れると目的のD、E、Gを取得できます。親ノード列にはルートを表すNULLもありますが、子ノード集合にはNULLがないので結果には影響しません。

イのINTERSECTは誤りです。これは二つの問合せ結果に共通する行を求める積集合演算です。この場合はA、B、C、Fとなり、子としても親としても現れる中間ノードを取得します。

ウのUNIONは誤りです。これは二つの結果をまとめ、重複行を除去する和集合演算です。末端かどうかを判定せず、階層に登場するノード全体などを返します。

エのUNION ALLは誤りです。これも和集合ですが、重複行を除去しません。同じ親ノードが複数回出現するため、AやBなどを重複したまま含む結果になります。

【ポイント】 集合演算では、左右のSELECTで列数と対応する列のデータ型をそろえる必要があります。 UNION、INTERSECT、EXCEPTは原則として重複を除去し、UNION ALLだけは重複を保持します。

出典:令和6年度 秋期 データベーススペシャリスト試験 午前II 問8
※ 解説は SkillStack 編集部が作成したものです。Web 表示のため、図表の配置や表記を一部改めています。

この回の25問を、アプリで通しで解く

  • 本番と同じ問題数・制限時間で通し演習(模試モード)
  • 間違えた問題は自動で「復習すべき問題」に回る
  • 解説で分からない点はAIに質問できる
SkillStackで無料で始める