
# 复合查询
包含复合运算符的查询，即复合查询。所有的复合查询都具有相同的优先级，参加集合操作的各查询结果的列数、表达式的数量都必须一致，类型必须兼容。
常见的集合运算有：
- 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;
  ```
  
 
