集合演算子の使用18

以下の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        = 100

2つ目のSELECT:

'A'                   = 'A'
TRUNC(101, -1)        = 100  (-1なので10の位で切り捨て)
ROUND(100)            = 100

3つ目のSELECT:

INITCAP('a')          = 'A'  (1文字目を大文字にする)
MOD(1100, 1000)       = 100  (1100 ÷ 1000 の余り)

3つすべてが ('A', 100) を返します。

UNION の特性: 重複行を自動的に削除します。そのため、結果として返るのは 1件のみ です。

集合演算子の比較:

演算子動作
UNION和集合(重複を排除、結果がソートされる)
UNION ALL和集合(重複を保持、ソートなしで高速)
INTERSECT積集合(両方に含まれる行)
MINUS差集合(左から右を引いたもの)

もし UNIONUNION ALL に変えると、3件返ります。