説明
このステートメントは、複数の 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 ステートメントの結果セットに含まれ、2番目の 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演算子を使用してそれらを結合して一つの結果セットにします。重複する行は保持されます。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演算子を使用してそれらを結合して一つの結果セットにします。重複する行は除外されます。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