集合演算子の前後のSELECT文を入れ替えると、返される行が変わる可能性がある集合演算子はどれですか。
AUNION
BUNION ALL
CINTERSECT
DMINUS✓
正解:D解説
MINUSは「1つ目の問合せの結果から、2つ目の問合せの結果に含まれる行を除いたもの」を返すため、前後を入れ替えると結果が変わります。
UNION・UNION ALL・INTERSECTは、前後を入れ替えても返される行の集合は変わりません。
集合A(1,2,3)と集合B(2,3,4)の場合
| 演算子 | A 演算子 B | B 演算子 A |
|---|---|---|
| UNION | 1,2,3,4 | 1,2,3,4 |
| UNION ALL | 1,2,3,2,3,4 | 2,3,4,1,2,3 |
| INTERSECT | 2,3 | 2,3 |
| MINUS | 1 | 4 |
UNION ALLは並び順が変わることがありますが、返される行の集合は同じです。
次の例では、集合演算子は左から順に評価されるため、括弧で集合A・集合Bをまとめています。
(SELECT 1 AS n FROM dual UNION ALL SELECT 2 FROM dual UNION ALL SELECT 3 FROM dual)
MINUS
(SELECT 2 FROM dual UNION ALL SELECT 3 FROM dual UNION ALL SELECT 4 FROM dual);
N
----------
1