PostgreSQL UNION 演算子
PostgreSQL UNION 演算子は、2つ以上のSELECT文の結果を結合します。
UNION 演算子は、2つ以上のSELECT文の結果セットを結合するために使用されます。
注意してください。UNION 内の各 SELECT 文は同じ数の列を持っている必要があります。列も類似したデータ型を持っている必要があります。さらに、各 SELECT 文の列の順序も同じでなければなりません。
構文
UNION の基本構文は次のとおりです:
SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition] UNION SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition]
ここの条件文は、必要に応じて任意の式を設定できます。
例
COMPANY テーブルを作成(COMPANY SQL ファイルをダウンロード)、データ内容は次のとおりです:
サンプルdb# select * from COMPANY; id | name | age | address | salary ----+-------+-----+-----------+-------- 1 | Paul | 32 | California| 20000 2 | Allen | 25 | Texas | 15000 3 | Teddy | 23 | Norway | 20000 4 | Mark | 25 | Rich-Mond | 65000 5 | David | 27 | Texas | 85000 6 | Kim | 22 | South-Hall| 45000 7 | James | 24 | Houston | 10000 (7 rows)
DEPARTMENT テーブルを作成(DEPARTMENT SQL ファイルをダウンロード)、データ内容は次のとおりです:
サンプルdb=# SELECT * from DEPARTMENT; id | dept | emp_id ----+-------------+-------- 1 | IT Billing | 1 2 | Engineering | 2 3 | Finance | 7 4 | Engineering | 3 5 | Finance | 4 6 | Engineering | 5 7 | Finance | 6 (7 rows)
次に、SELECT 文で UNION 句を使用して2つのテーブルを結合します。次のようになります:
SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID
UNION
SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;
結果は次のとおりです:
emp_id | name | dept
--------+-------+--------------
5 | David | Engineering
6 | Kim | Finance
2 | Allen | Engineering
3 | Teddy | Engineering
4 | Mark | Finance
1 | Paul | IT Billing
7 | James | Finance
(7 rows)
UNION ALL 句
UNION ALL 演算子は、重複する行を持つ2つのSELECT文を接続できます。デフォルトでは、UNION 演算子は異なる値を選択します。重複する値を許可する場合は、UNION ALL を使用してください。
構文
UNION ALL 句の基本構文は次のとおりです:
SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition] UNION ALL SELECT column1 [, column2 ] FROM table1 [, table2 ] [WHERE condition]
ここの条件文は、必要に応じて任意の式を設定できます。
例
次に、上記の2つのテーブルを SELECT 文と UNION ALL 句を組み合わせて結合してみましょう:
SELECT EMP_ID, NAME, DEPT FROM COMPANY INNER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID
UNION ALL
SELECT EMP_ID, NAME, DEPT FROM COMPANY LEFT OUTER JOIN DEPARTMENT
ON COMPANY.ID = DEPARTMENT.EMP_ID;
結果は次のとおりです:
emp_id | name | dept
--------+-------+--------------
1 | Paul | IT Billing
2 | Allen | Engineering
7 | James | Finance
3 | Teddy | Engineering
4 | Mark | Finance
5 | David | Engineering
6 | Kim | Finance
1 | Paul | IT Billing
2 | Allen | Engineering
7 | James | Finance
3 | Teddy | Engineering
4 | Mark | Finance
5 | David | Engineering
6 | Kim | Finance
(14 rows)
その他の拡張