令和2年度 10月 午前Ⅱ 問7
データ操作
NULLに関する問題
表Rと表Sに対し,SQL文を実行して結果を得るとき,aに入れる字句はどれか。ここで,結果のNULLは値が存在しないことを表す。
R
| ID | 名称1 |
|---|---|
| 1 | AAA |
| 2 | BBB |
| 3 | CCC |
S
| ID | 名称2 |
|---|---|
| 2 | bbb |
| 3 | ccc |
| 4 | ddd |
〔結果〕
| ID | 名称1 | 名称2 |
|---|---|---|
| 1 | AAA | NULL |
| 2 | BBB | bbb |
| 3 | CCC | ccc |
| 4 | NULL | ddd |
〔SQL文〕
SELECT [ a ] (R.ID, S.ID) AS ID, 名称1, 名称2 FROM R FULL JOIN S ON R.ID = S.ID ORDER BY ID
- アCOALESCE
- イDISTINCT
- ウNULLIF
- エUNIQUE
答えと解説を見る
✓ これが正解アCOALESCE
解説
COALESCEで、R.IDがNULLならS.IDを使ってIDの列を埋めます。
R FULL JOIN S は、両方の表のIDが一致する行を結び付け、相手のない行も両側から残します。結合した結果のR.IDとS.IDの組は、(1, NULL)、(2, 2)、(3, 3)、(NULL, 4)の4行です。結果のID列が1、2、3、4と埋まるには、R.IDがNULLでなければその値を、NULLならS.IDを返す働きが必要です。COALESCEは、引数を先頭から見て最初のNULLでない値を返す関数なので、4行それぞれで1、2、3、4が得られ、結果と一致します。完全外結合でできたNULLの穴を、もう一方の列の値で埋めたいときに使う関数だと覚えておくと見分けられます。
ほかの選択肢はなぜ違うのか
- イDISTINCT:DISTINCTは、SELECTの結果から重複した行を取り除く指定で、二つの値を受け取ってどちらかを返す関数ではありません。R.IDとS.IDのどちらかを選んでID列を埋める働きは持っていません。
- ウNULLIF:NULLIFは、二つの引数が等しければNULLを、異なれば最初の引数を返します。各行に当てはめると、1行目は1、2行目と3行目は値が等しいのでNULL、4行目はR.IDがNULLなのでNULLとなり、結果と合いません。
- エUNIQUE:UNIQUEは、副問合せの結果に重複がないかを調べる述語や、列の値の重複を禁じる制約で使う語です。二つの値からNULLでない方を返す関数ではないので、ID列を埋められません。
出典:令和2年度 10月 データベーススペシャリスト試験 午前Ⅱ 問7
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)