SELECTの結果自体を対象として演算を行う。
これらの演算は、対象となるSELECTの結果が同じ列数で、対応する列が同じ型である必要がある。
列名は同じである必要はない。結果の列名は最初のSELECTの列名となる。
次のSQLをファイルとして作成。(setup111.sql)
ログイン画面から実行。
oddtbs=> \i setup111.sql ... oddtbs=> select * from t1; a | b ---+-------- 1 | DATA_1 2 | DATA_2 3 | DATA_3 4 | DATA_4 5 | DATA_5 6 | DATA_6 (6 rows) oddtbs=> select * from t2; c | d ---+-------- 4 | DATA_4 5 | DATA_5 6 | DATA_6 7 | DATA_7 8 | DATA_8 9 | DATA_9 (6 rows)
UNIONは両方の結果を単純に足し合わせる。
SELECT文 UNION [ALL] SELECT文;
ALLが指定された場合、両方に重複した行も表示する。
ログイン画面から実行。
oddtbs=> select * from t1 union select * from t2; a | b ---+-------- 1 | DATA_1 2 | DATA_2 3 | DATA_3 4 | DATA_4 5 | DATA_5 6 | DATA_6 7 | DATA_7 8 | DATA_8 9 | DATA_9 (9 rows) oddtbs=> select * from t1 union all select * from t2; a | b ---+-------- 1 | DATA_1 2 | DATA_2 3 | DATA_3 4 | DATA_4 5 | DATA_5 6 | DATA_6 4 | DATA_4 5 | DATA_5 6 | DATA_6 7 | DATA_7 8 | DATA_8 9 | DATA_9 (12 rows)
INTERSECTは両方の結果の共通部分となる。
SELECT文 INTERSECT SELECT文;
ログイン画面から実行。
oddtbs=> select * from t1 intersect select * from t2;
a | b
---+--------
4 | DATA_4
5 | DATA_5
6 | DATA_6
(3 rows)
EXCEPTは左の結果から右の結果を取り除く。
SELECT文 EXCEPT SELECT文;
ログイン画面から実行。
oddtbs=> select * from t1 except select * from t2; a | b ---+-------- 1 | DATA_1 2 | DATA_2 3 | DATA_3 (3 rows) oddtbs=> select * from t1 except (select * from t1 except select * from t2); a | b ---+-------- 4 | DATA_4 5 | DATA_5 6 | DATA_6 (3 rows)