更新时间:2024-07-24 GMT+08:00

UNION | INTERSECT | EXCEPT

UNION、INTERSECT和EXCEPT都是集合操作。都用来将多个SELECT语句的结果集合并成单个结果集。

UNION

UNION将第一个查询的结果集中的所有行与第二个查询的结果集中的行合并。

query UNION [ALL | DISTINCT] query

ALL和DISTINCT表示是否返回包含重复的行。ALL返回所有的行;DISTINCT返回只包含唯一的行。如果未设置,默认为DISTINCT。

INTERSECT

query INTERSECT [DISTINCT] query

INTERSECT仅返回第一个和第二个查询的结果相交的行。以下是最简单的INTERSECT子句之一的示例。它选择值13和42,并将此结果集与选择值13的第二个查询合并。由于42仅在第一个查询的结果集中,因此不包含在最终结果中。

SELECT * FROM (VALUES 13,42) INTERSECT SELECT 13;
 _col0 ------- 
    13
 (1 row)

EXCEPT

query EXCEPT [DISTINCT] query

EXCEPT返回在第一个查询结果而不在第二个查询结果中的行。

SELECT * FROM (VALUES 13, 42) EXCEPT SELECT 13;
 _col0
-------
   42
(1 row)

Having子句目前不支持使用列的别名,例如:

select count(userid) as num ,dept as aaa from salary group by dept having aaa='d1';

报错如下:

Query 20210630_085136_00024_wc8n9@default@HetuEngine failed: line 1:75: Column 'aaa' cannot be resolved