データベーススペシャリスト令和2年秋期 午前U 問7

問7

表Rと表Sに対し,SQL文を実行して結果を得るとき,aに入れる字句はどれか。ここで,結果のNULLは値が存在しないことを表す。
07_1.gif/image-size:434×135
〔SQL文〕
07_2.gif/image-size:359×58
  • COALESCE
  • DISTINCT
  • NULLIF
  • UNIQUE

分類

テクノロジ系 » データベース » データ操作

正解

解説

「R FULL JOIN S ON R.ID = S.ID」のFULL JOIN(FULL OUTER JOIN)は完全外部結合を表します。LEFT OUTER JOIN と RIGHT OUTER JOIN を組み合わせた結合演算と考えるといいでしょう。

「R FULL JOIN S ON R.ID = S.ID」で結合すると、R側のID列の値がS側のID列に存在しない場合、そのR側レコードに対応するS側レコードの各列はNULLで埋められます。他方で、S側のID列の値がR側のID列に存在しない場合、そのS側レコードに対応するR側レコードの各列はNULLで埋められます。よって、テーブル結合時、R.IDの値が1の行はS.名称2がNULL、S.IDが4の行はR.名称1がNULLとなります。
07_3.gif/image-size:361×151
この中間結果の表から、〔結果〕のID列(1,2,3,4)を得るためのaを考えます。
  • 正しい。COALESCEは引数を最初から1つずつ走査し、NULLでない値が見つかった場合にその値を返します。COALESCE(A, B)はAがNULLのときBを返し、そうでないときAを返すので、IDが1の列の値としてR.IDが採用され、IDが4のの列の値としてS.IDが採用されます。後は名称1と名称2がそのまま表示すれば、〔結果〕のデータが得られます。
  • DISTINCTは引数をとらないので誤りです。
  • NULLIF(A, B)はAとBが等しいときにNULLを返し、そうでないときAを返します。もし、aがNULLIFであったら、〔結果〕のID列の値が2,3,4の部分はNULLになるはずなので誤りです。
  • UNIQUEはSELECT文では使用しません。
© 2016-2023 データベーススペシャリストドットコム All Rights Reserved.

Pagetop