select_expression_1 (UNION|INTERSECT|EXCEPT) select_expression_2 select_expression_1 (UNION ALL|INTERSECT ALL|EXCEPT ALL) select_expression_2可以将多个SELECT语句的结果合成单个结果。如果说JOIN是将表左右连接,那么集合运算是以一定条件将表首尾相接,所以 其中每一个SELECT语句返回的列数必须相同,列值类型必须对应,对应列列名也必须相同。否则Inceptor会抛出一个schema error。当SELECT语句结果列名不同时,要使用列化名。
select_expression_1 UNION select_expression_2 UNION select_expreession_3 INTERSECT select_expression_4 ...
[$host] transwarp> DESCRIBE test_a; a_int int None a_double double None a_string string None [$host] transwarp> SELECT * FROM test_a; 1 1.01 a 1 1.02 b 1 1.02 b 2 2.02 c 2 2.04 c 3 3.03 d [$host] transwarp> DESCRIBE test_b; b_int int None b_string1 string None b_double double None b_string2 string None [$host] transwarp> SELECT * FROM test_b; 1 b 1.02 f 1 c 1.04 g

select_statement_1 UNION select_statement_2 select_statement_1 UNION ALL select_statement_2
如果我们要对UNION ALL的结果进行进一步的处理,我们可以像下面这样将整个UNION子句内嵌进一个FROM子句:
SELECT * FROM ( select_statement UNION ALL select_statement ) unionResult举例
[$host] transwarp> SELECT a_int union_int, a_double union_double, a_string union_string FROM test_a UNION SELECT b_int union_int, b_double union_double, b_string1 union_string FROM test_b; 1 1.01 a 1 1.02 b 1 1.02 b 2 2.02 c 2 2.04 c 3 3.03 d 1 1.02 b 1 1.04 c

select_expression_1 INTERSECT select_expression_2 select_expression_1 INTERSECT ALL select_expression_2举例
[$host] transwarp> SELECT a_int ii, a_double id, a_string is FROM test_a INTERSECT SELECT b_int ii, b_double id, b_string1 is FROM test_b; 1 1.02 bINTERSECT ALL不去重:
[$host] transwarp> SELECT a_int ii, a_double id, a_string is FROM test_a INTERSECT ALL SELECT b_int ii, b_double id, b_string1 is FROM test_b; 1 1.02 b 1 1.02 b
select_statement_1 EXCEPT select_statement_2 select_statement_1 EXCEPT ALL select_statement_2

举例
EXCEPT
[$host] transwarp> SELECT a_int ei FROM test_a EXCEPT SELECT b_int ei FROM test_b; 2 3EXCEPT ALL
[$host] transwarp> SELECT a_int ei FROM test_a EXCEPT ALL SELECT b_int ei FROM test_b; 2 2 3