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

表Aと表Bから,どちらか一方にだけ含まれるIDを得るSQL文の a に入れる字句はどれか。

表Aと表B
図の説明テキスト

表Aと表Bの2つの表が横に並んでいる。

表A:

ID
100
200
300
400

表B:

ID
200
400
600
800
SQL 文
図の説明テキスト

〔SQL 文〕

SELECT COALESCE(A.ID, B.ID)
  FROM A <span id="q10_blank_a" class="blank-label">a</span> B ON A.ID = B.ID
  WHERE A.ID IS NULL OR B.ID IS NULL
解答・解説

正解: ア. FULL OUTER JOIN

表Aと表Bから、「どちらか一方にだけ含まれるID」を得るためには、両方の表のすべてのデータを対象としつつ、結合条件に一致しないデータも抽出できる結合方法を用いる必要があります。これを実現するのが FULL OUTER JOIN(完全外部結合) です。

FULL OUTER JOINを使用すると、表Aにのみ存在する行と表Bにのみ存在する行の両方が抽出され、相手の表に存在しない列の値は NULL となります。その後、WHERE 句などで NULL となっている行を抽出することで、どちらか一方にだけ含まれるIDを得ることができます。

各選択肢の解説

  • ア: FULL OUTER JOIN
    正解です。左右両方の表のすべての行を抽出し、一致しない行は NULL で補完するため、両方の表において片方にしか存在しないデータを取得する目的に合致します。
  • イ: INNER JOIN
    内部結合です。両方の表に 共通して存在する(一致する) データのみを抽出するため、どちらか一方にだけ含まれるデータは取得できません。
  • ウ: LEFT OUTER JOIN
    左外部結合です。左側の表(表A)のすべての行と、右側の表(表B)で結合条件に一致する行を抽出します。表Bにのみ存在するデータは取得できません。
  • エ: RIGHT OUTER JOIN
    右外部結合です。右側の表(表B)のすべての行と、左側の表(表A)で結合条件に一致する行を抽出します。表Aにのみ存在するデータは取得できません。

Spineチーム