更新时间:2024-06-03 GMT+08:00

复合查询

包含复合运算符的查询,即复合查询。所有的复合查询都具有相同的优先级,参加集合操作的各查询结果的列数、表达式的数量都必须一致,类型必须兼容。

常见的集合运算有:

  • UNION:两个查询结果集的并集,对结果进行去重。
  • UNION ALL:两个查询的并集,只将两个查询的结果合并。
  • INTERSECT:两个查询的交集(只查询重复的数据)。
  • MINUS:查询用于获得两个查询结果集的差集,只会显示第一个结果集中存在,但第二个结果集中不存在的数据,并且会以第一列结果进行排序。

示例

--建表并插入数据。
gaussdb=# CREATE TABLE test1(c11 INT, c12 VARCHAR);
gaussdb=# INSERT INTO test1 VALUES (1,'a'),(2,'b'),(4,'d');

gaussdb=# CREATE TABLE test2(c21 INT, c22 VARCHAR); 
gaussdb=# INSERT INTO test2 VALUES (1,'a'),(3,'c');
  • UNION
    gaussdb=# SELECT * FROM test1 UNION SELECT * FROM test2;
     c11 | c12 
    -----+-----
       1 | a
       4 | d
       2 | b
       3 | c
    (4 rows)
  • UNION ALL
    gaussdb=# SELECT * FROM test1 UNION ALL SELECT * FROM test2;
     c11 | c12 
    -----+-----
       1 | a
       2 | b
       4 | d
       1 | a
       3 | c
    (5 rows)
  • INTERSECT
    gaussdb=# SELECT * FROM test1 INTERSECT SELECT * FROM test2;
     c11 | c12 
    -----+-----
       1 | a
    (1 row)
  • MINUS
    gaussdb=# SELECT * FROM test1 MINUS SELECT * FROM test2;
     c11 | c12 
    -----+-----
       4 | d
       2 | b
    (2 rows)
    -- 删除。
    gaussdb=# DROP TABLE test1,test2;