以下のSQL文で、何行のデータが返されますか。
SELECT UPPER('a'), 100 FROM dual
UNION
SELECT 'A', ROUND(TRUNC(101,-1)) FROM dual
UNION
SELECT INITCAP('a'), MOD(1100,1000) FROM dual;A0行
B1行✓
C2行
D3行
Eエラーになる
正解:B解説
各SELECT文を評価していくと、すべて'A'と100を返します。
1つ目のSELECT
UPPER('a') = 'A'
100 = 1002つ目のSELECT
'A' = 'A'
TRUNC(101, -1) = 100 (-1なので10の位で切り捨て)
ROUND(100) = 1003つ目のSELECT
INITCAP('a') = 'A' (1文字目を大文字にする)
MOD(1100, 1000) = 100 (1100 ÷ 1000 の余り) 3つすべてが('A', 100)を返します。
UNIONの特性:重複行を自動的に削除します。そのため、結果として返るのは1件のみです。
集合演算子の比較
| 演算子 | 動作 |
|---|---|
| UNION | 和集合(重複を排除、結果がソートされる) |
| UNION ALL | 和集合(重複を保持、ソートなしで高速) |
| INTERSECT | 積集合(両方に含まれる行) |
| MINUS | 差集合(左から右を引いたもの) |
もしUNIONをUNION ALLに変えると、3件返ります。