HOME»データベーススペシャリスト令和2年秋期»午前Ⅱ 問7
データベーススペシャリスト令和2年秋期 午前Ⅱ 問7
問7
表Rと表Sに対し,SQL文を実行して結果を得るとき,aに入れる字句はどれか。ここで,結果のNULLは値が存在しないことを表す。〔SQL文〕
- 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となります。この中間結果の表から、〔結果〕のID列(1,2,3,4)を得るためのaを考えます。
「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となります。この中間結果の表から、〔結果〕の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文では使用しません。