令和5年度 秋期 午前Ⅱ 問10
データ操作
COALESCEに関する問題
表Aと表Bから,どちらか一方にだけ含まれるIDを得るSQL文のaに入れる字句はどれか。
A
| ID |
|---|
| 100 |
| 200 |
| 300 |
| 400 |
B
| ID |
|---|
| 200 |
| 400 |
| 600 |
| 800 |
〔SQL文〕
SELECT COALESCE(A.ID, B.ID)
FROM A [ a ] B ON A.ID = B.ID
WHERE A.ID IS NULL OR B.ID IS NULL- アFULL OUTER JOIN
- イINNER JOIN
- ウLEFT OUTER JOIN
- エRIGHT OUTER JOIN
答えと解説を見る
✓ これが正解アFULL OUTER JOIN
解説
FULL OUTER JOIN で両方の行を残し、片側だけの ID を得ます。
WHERE 句は、A.ID と B.ID のどちらかが NULL の行だけを残します。結合で相手が見つからなかった行は相手側の列が NULL になるので、一方の表にしかない ID を拾うには、両方の表の行をすべて残す結合が必要です。FULL OUTER JOIN で A と B を ID で結合すると、200 と 400 は両方に値がそろい、100 と 300 は B 側が NULL、600 と 800 は A 側が NULL になります。WHERE で両方そろった行を除くと4行が残り、COALESCE が NULL でない側の ID を返すので、結果は 100、300、600、800 です。見分ける軸は、相手のない行をどちら側について残すかです。両側とも残すのは完全外部結合と覚えておきましょう。
ほかの選択肢はなぜ違うのか
- イINNER JOIN:INNER JOIN は、両方の表に同じ ID がある行だけを返すので、結合結果は 200 と 400 の2行で、どちらの列も NULL になりません。WHERE の条件を満たす行がなくなり、結果は0行になります。
- ウLEFT OUTER JOIN:LEFT OUTER JOIN は、A の行をすべて残し、B に相手がない行の B 側を NULL にします。100 と 300 は取り出せますが、B にしかない 600 と 800 は結合結果に現れず、取りこぼします。
- エRIGHT OUTER JOIN:RIGHT OUTER JOIN は、B の行をすべて残し、A に相手がない行の A 側を NULL にします。600 と 800 は取り出せますが、A にしかない 100 と 300 は結合結果に現れず、取りこぼします。
この問題の用語
- OR数学の手法を使って、いくつかの案から最も有利なものを選ぶ考え方です。期待される費用や利益を計算して比べるときに使います。
出典:令和5年度 秋期 データベーススペシャリスト試験 午前Ⅱ 問10
同じ用語が出る問題
- 令和6年度 秋期 午前Ⅱ 問10:副問合せに関する問題(OR)
- 令和4年度 秋期 午前Ⅱ 問12:相関副問合せに関する問題(OR)
- 平成30年度 春期 午前Ⅱ 問15:インデックスを比較した説明(OR)
- 平成27年度 春期 午前Ⅱ 問15:インデックスを比較した説明(OR)
- 平成25年度 春期 午前Ⅱ 問15:インデックスを比較した説明(OR)
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)