UNION:テーブルの足し算。二つのテーブルに含まれていたレコードが全て網羅される。重複行を排除する。
postgres=# SELECT shohin_id, shohin_mei FROM Shohin UNION
postgres-# SELECT shohin_id, shohin_mei FROM Shohin2;
shohin_id | shohin_mei
-----------+----------------
0006 | フォーク
0009 | 手袋
0005 | 圧力鍋
0007 | おろしがね
0008 | ボールペン
0002 | 穴あけパンチ
0001 | Tシャツ
0003 | カッターシャツ
0004 | 包丁
0010 | やかん
(10 rows)
SELECT shohin_id, shohin_mei FROM Shohin UNION
SELECT shohin_id, shohin_mei, hanbai_tanka FROM Shohin2;
ERROR: each UNION query must have the same number of columns
LINE 2: SELECT shohin_id, shohin_mei, hanbai_tanka FROM Shohin2;
SELECT shohin_id, shohin_mei FROM Shohin UNION
SELECT shohin_id, torokubi FROM Shohin2;
ERROR: UNION types character varying and date cannot be matched
LINE 2: SELECT shohin_id, torokubi FROM Shohin2;
// データ型が一致していればレコードの列が違ってもエラーは出ない
SELECT shohin_id, shiire_tanka FROM Shohin UNION
SELECT shohin_id, hanbai_tanka FROM Shohin2;
shohin_id | shiire_tanka
-----------+--------------
0003 | 2800
0001 | 500
0005 | 5000
0009 | 800
0008 |
0002 | 500
0010 | 2000
0004 | 2800
0003 | 4000
0006 |
0002 | 320
0001 | 1000
0007 | 790
(13 rows)
postgres=# SELECT shohin_id, shohin_mei
postgres-# FROM Shohin
postgres-# WHERE shohin_bunrui = 'キッチン用品'
postgres-# UNION
postgres-# SELECT shohin_id, shohin_mei
postgres-# FROM Shohin2
postgres-# WHERE shohin_bunrui = 'キッチン用品'
postgres-# GROUP BY shohin_id;
shohin_id | shohin_mei
-----------+------------
0004 | 包丁
0005 | 圧力鍋
0006 | フォーク
0007 | おろしがね
0010 | やかん
(5 rows)
ALLオプション:重複行を残す集合演算
SELECT shohin_id, shohin_mei FROM Shohin UNION ALL
SELECT shohin_id, shohin_mei FROM Shohin2;
shohin_id | shohin_mei
-----------+----------------
0001 | Tシャツ
0002 | 穴あけパンチ
0003 | カッターシャツ
0004 | 包丁
0005 | 圧力鍋
0006 | フォーク
0007 | おろしがね
0008 | ボールペン
0001 | Tシャツ
0002 | 穴あけパンチ
0003 | カッターシャツ
0009 | 手袋
0010 | やかん
(13 rows)
INTERSECT:テーブルの共通部分の選択。二つのレコードの共通部分だけ抜き出す。
SELECT shohin_id, shohin_mei FROM Shohin INTERSECT
SELECT shohin_id, shohin_mei FROM Shohin2;
shohin_id | shohin_mei
-----------+----------------
0002 | 穴あけパンチ
0001 | Tシャツ
0003 | カッターシャツ
(3 rows)
EXCEPT:レコードの引き算。どちらから引くかによって結果が変わる。
postgres=# SELECT shohin_id, shohin_mei FROM Shohin EXCEPT
SELECT shohin_id, shohin_mei FROM Shohin2
ORDER BY shohin_id;
shohin_id | shohin_mei
-----------+------------
0004 | 包丁
0005 | 圧力鍋
0006 | フォーク
0007 | おろしがね
0008 | ボールペン
(5 rows)