この記事では、セット系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