このセクションでは、セット型SELECTの構文について説明します。
説明
このステートメントは、複数の SELECT クエリの結果を1つの結果に結合するために使用されます。各 SELECT の列数とデータ型は同じでなければなりませんが、列の長さは異なっても構いません。
構文
select_clause_set:
simple_select [ UNION | UNION ALL | MINUS | INTERSECT] select_clause_set_right
[ORDER BY sort_list_columns]
select_clause_set_right:
simple_select
| select_caluse_set
パラメータの説明
パラメータ |
説明 |
|---|---|
| UNION ALL | 2つのクエリの結果を結合します。 |
| UNION | 2つのクエリの結果を結合し、重複を除去します。 |
| MINUS | 左側のクエリ結果セットから、右側のクエリにも含まれる重複を除去します。 |
| INTERSECT | 左側のクエリ結果セットと右側のクエリ結果セットの共通部分(交差)を抽出し、重複を除去します。 |
例
サンプルテーブル tbl1 と tbl2 を作成します。
obclient> CREATE TABLE tbl1 (col1 INT, col2 INT);
Query OK, 0 rows affected
obclient> CREATE TABLE tbl2 (col1 INT, col2 INT);
Query OK, 0 rows affected
obclient> INSERT INTO tbl1 VALUES (1, 1), (2, 2),(2,2);
Query OK, 3 rows affected
Records: 3 Duplicates: 0 Warnings: 0
obclient> INSERT INTO tbl2 VALUES (2, 2),(2, 2),(3,3);
Query OK, 3 rows affected
Records: 3 Duplicates: 0 Warnings: 0
obclient> SELECT * FROM tbl1;
+------+------+
| COL1 | COL2 |
+------+------+
| 1 | 1 |
| 2 | 2 |
| 2 | 2 |
+------+------+
3 rows in set
obclient> SELECT * FROM tbl2;
+------+------+
| COL1 | COL2 |
+------+------+
| 2 | 2 |
| 2 | 2 |
| 3 | 3 |
+------+------+
3 rows in set
tbl1とtbl2のすべてのレコードを合計します。obclient> SELECT col1, col2 FROM tbl1 UNION ALL SELECT col1, col2 FROM tbl2; +------+------+ | COL1 | COL2 | +------+------+ | 1 | 1 | | 2 | 2 | | 2 | 2 | | 2 | 2 | | 2 | 2 | | 3 | 3 | +------+------+ 6 rows in settbl1とtbl2の重複を除いたすべてのレコードを合計します。obclient> SELECT col1, col2 FROM tbl1 UNION SELECT col1, col2 FROM tbl2; +------+------+ | COL1 | COL2 | +------+------+ | 1 | 1 | | 2 | 2 | | 3 | 3 | +------+------+ 3 rows in setテーブル
tbl1とtbl2に共通するデータを合計します。obclient> SELECT col1, col2 FROM tbl1 INTERSECT SELECT col1, col2 FROM tbl2; +------+------+ | COL1 | COL2 | +------+------+ | 2 | 2 | +------+------+ 1 row in setテーブル
tbl1には存在するが、テーブルtbl2には存在しないデータを合計します。obclient> SELECT col1, col2 FROM tbl1 MINUS SELECT col1, col2 FROM tbl2; +------+------+ | COL1 | COL2 | +------+------+ | 1 | 1 | +------+------+ 1 row in set