SQL集合操作用于组合两个或多个SQL SELECT语句。
集合操作的类型
SQL Union
操作用于组合两个或多个SQL SELECT
查询的结果。
在union
操作中,在应用UNION
操作的两个表中,所有数据类型和列的数量必须相同。union
操作从结果集中删除重复的行。
语法
SELECT column_name FROM table1 UNION SELECT column_name FROM table2;
假设有两个表,第一个表:First 的结构和数据如下 -
ID | NAME |
---|---|
1 | Jack |
2 | Harry |
3 | Jackson |
第二个表:Second 的结构和数据如下 -
ID | NAME |
---|---|
3 | Jackson |
4 | Stephan |
5 | David |
Union的SQL查询如下:
SELECT * FROM First UNION SELECT * FROM Second;
执行查询后如下所示:
ID | NAME |
---|---|
1 | Jack |
2 | Harry |
3 | Jackson |
4 | Stephan |
5 | David |
Union All
操作等于Union
操作。它返回集合但不删除重复和排序数据。
语法:
SELECT column_name FROM table1 UNION ALL SELECT column_name FROM table2;
示例: 使用上面的第一个和第二个表。
Union All
查询语句如下:
SELECT * FROM First UNION ALL SELECT * FROM Second;
执行查询后结果如下所示:
ID | NAME |
---|---|
1 | Jack |
2 | Harry |
3 | Jackson |
3 | Jackson |
4 | Stephan |
5 | David |
它用于组合两个SELECT语句。 相交(Intersect)操作从两个SELECT
语句返回公共行。
在“相交”操作中,数据类型和列的数量必须相同。
它没有重复项,默认情况下按升序排列数据。
语法
SELECT column_name FROM table1 INTERSECT SELECT column_name FROM table2;
示例:
使用上面的First
表和Second
表。
相交查询语句是:
SELECT * FROM First INTERSECT SELECT * FROM Second;
执行上面查询语句,得到以下结果:
ID NAME ---------------------------------- 3 Jackson
它结合了两个SELECT语句的结果。 差集运算符用于显示第一个查询中存在但第二个查询中不存在的行。
它没有重复项,默认情况下按升序排列数据。
语法:
SELECT column_name FROM table1 MINUS SELECT column_name FROM table2;
示例
使用上面的First
表和Second
表。
差积查询语句是:
SELECT * FROM First MINUS SELECT * FROM Second;
执行上面查询语句,得到以下结果:
ID NAME ------------------------------------ 1 Jack 2 Harry