第9章 集合演算子の使用方法

集合演算子は、()を使用することで、優先順位を制御できる。
集合演算子は、全て優先順位は同じであるため、最初の1つ目から処理を行っていく。
ただし、()を使うことで、後の集合演算子を優先して処理させることができる。

■UNION演算子

重複は省かれ、NULL値は含んで結果を出す。昇順にソートされる。

■INTERSECT
INTERSECT演算子は、2つの問合せ結果のうち、共通する行だけを戻す。
2つの問合せに同一の行がある場合、その行は、1度しか表示されない。
UNION演算子と同様に、内部的にデータをソートした上で重複した行を排除するため、実行結果は、
SELECT句の先頭に指定されている列の値で昇順にソートされる。NULL値も共通行であれば、最後の行に出力される。

■MINUS
MINUS演算子は、1つ目の問合せ結果のうち、2つ目の問合せ結果にない行を戻す。
MINUS演算子は、UNION演算子と同様に内部的にデータを祖0とした上で、不要な行を排除するため、実行結果は、
SELECT句の先頭に指定した列の値で昇順にソートされる。

複合問合せでは、SELECT句に指定する列(または式)の個数を2つの問合せで同数にする必要がある。
2つ目の問合せのSELECT句に指定する列のデータ型は、1つ目の問合せのSELECT句に指定されている列のデータ型と同じデータ型グループである必要がある。
それぞれに指定する列の名前は、異なっていても、かまわないが、問合せ結果の列見出しには、1つ目の問合せに指定した列名が表示される。

集合演算子の優先順位
UNION、UNION ALL、INTERSECT、MINUSの優先順位は同じである。
左(上)から右(下)の順に評価される
カッコがあれば、カッコ内が優先される。

IN演算子は、UNION演算子よりも優先順位が高い。

ORDER BY句を使った集合演算に関するルールは、以下の通りである。
ORDER BY句は、複合問合せ文の最後に1回だけ指定できる。
ORDER BY句では、最初の問合せ文の列名または、列別名をしていしなければならない。また、SELECT句リストのいち番号も使用できる。

あわせて読みたい