説明
このステートメントは、複数のSELECTクエリの結果に対して集合演算を実行するために使用されます。
制限事項と注意点
集合演算子はすべて同じ優先順位を持ちます。SQL文に複数の集合演算子が含まれている場合、OceanBaseデータベースは括弧で演算の順序を明示的に指定しない限り、左から右の順にそれらを計算します。
各集合演算子は
SELECTステートメントの結果セットに対してのみ操作でき、各結果セットの列数とデータ型は同一でなければなりません。
構文
select_stmt
{UNION | UNION ALL | MINUS | EXCEPT | INTERSECT} select_stmt
[, {UNION | UNION ALL | MINUS | EXCEPT | INTERSECT} select_stmt ...]
[ORDER BY order_by_condition_list]
[LIMIT limit_clause];
パラメータの説明
| パラメータ | 説明 |
|---|---|
| select_stmt | セットコンピューティング用の SELECT ステートメント。SELECT ステートメントの詳細については、SELECTを参照してください。 |
| UNION | 2つの SELECT ステートメントの結果セットを1つの集合に統合し、重複する行を削除します。 |
| UNION ALL | 2つの SELECT ステートメントの結果セットを1つの集合に統合し、重複する行を削除しません。 |
| MINUS | EXCEPT | 前の SELECT ステートメントの結果セットに含まれない、次の SELECT ステートメントの結果セット内の行を返します。MINUS は EXCEPT のシノニムです。 |
| INTERSECT | 2つの SELECT ステートメントの結果セットの共通部分を返し、重複を削除します。 |
| ORDER BY order_by_condition_list | セットコンピューティング後のソートを指定します。 |
| LIMIT limit_clause | セットコンピューティング後に返す行数を指定します。 |
例
テーブル
test_tbl1とtest_tbl2を作成します。CREATE TABLE test_tbl1 (col1 INT, col2 INT); CREATE TABLE test_tbl2 (col1 INT, col2 INT);テーブル
test_tbl1とtest_tbl2にテストデータを挿入します。INSERT INTO test_tbl1 VALUES (1, 1), (2, 2), (4, 4); INSERT INTO test_tbl2 VALUES (2, 2), (3, 3), (5, 5);
テーブル
test_tbl1とtest_tbl2からcol1およびcol2列のデータを選択し、UNION ALL演算子を使用してそれらを1つの結果セットに統合します。重複する行は保持されます。SELECT col1, col2 FROM test_tbl1 UNION ALL SELECT col1, col2 FROM test_tbl2;実行結果は次のとおりです:
+------+------+ | col1 | col2 | +------+------+ | 1 | 1 | | 2 | 2 | | 4 | 4 | | 2 | 2 | | 3 | 3 | | 5 | 5 | +------+------+ 6 rows in setテーブル
test_tbl1とtest_tbl2からcol1およびcol2列のデータを選択し、UNION演算子を使用してそれらを1つの結果セットに統合します。重複する行は削除されます。SELECT col1, col2 FROM test_tbl1 UNION SELECT col1, col2 FROM test_tbl2;実行結果は次のとおりです:
+------+------+ | col1 | col2 | +------+------+ | 1 | 1 | | 2 | 2 | | 4 | 4 | | 3 | 3 | | 5 | 5 | +------+------+ 5 rows in setテーブル
test_tbl1とtest_tbl2からcol1およびcol2列のデータを選択し、2つのテーブルの共通部分を返します。つまり、test_tbl1とtest_tbl2のcol1およびcol2列のデータの重複部分を返します。SELECT col1, col2 FROM test_tbl1 INTERSECT SELECT col1, col2 FROM test_tbl2;実行結果は次のとおりです:
+------+------+ | col1 | col2 | +------+------+ | 2 | 2 | +------+------+ 1 row in setテーブル
test_tbl1からcol1およびcol2列のデータを選択し、テーブルtest_tbl2の同じcol1およびcol2列のデータを除外します。つまり、test_tbl1にありtest_tbl2にないデータ行を返します。SELECT col1, col2 FROM test_tbl1 EXCEPT SELECT col1, col2 FROM test_tbl2;実行結果は次のとおりです:
+------+------+ | col1 | col2 | +------+------+ | 1 | 1 | | 4 | 4 | +------+------+ 2 rows in setテーブル
test_tbl1とtest_tbl2からcol1およびcol2のデータを取得し、それらを統合します。その後、統合後の結果をcol1で降順にソートし、上位3件の結果のみを返します。SELECT col1, col2 FROM test_tbl1 UNION SELECT col1, col2 FROM test_tbl2 ORDER BY col1 DESC LIMIT 3;実行結果は次のとおりです:
+------+------+ | col1 | col2 | +------+------+ | 5 | 5 | | 4 | 4 | | 3 | 3 | +------+------+ 3 rows in set