SQL 中的 SET 运算符

2025年3月17日 | 阅读 7 分钟

集合运算符是一种特殊类型的运算符,用于组合两个查询的结果。

集合运算符包括:

  1. UNION
  2. UNION ALL
  3. INTERSECT
  4. MINUS(差集)
SET Operators in SQL

在 SQL 中使用集合运算符执行操作必须遵循某些规则。规则如下:

  1. 列的数量和顺序必须相同。
  2. 数据类型必须兼容。

让我们通过示例更详细地了解每个集合运算符。

所有示例都将使用 MySQL 数据库编写。

假设我们有以下表格和给定数据。

表 1:t_employees

ID名称部门薪金工作经验年限
1Aakash Singh开发720002
2Abhishek Pawar生产450001
3Pranav DeshmukhHR599003
4Shubham Mahale帐户570002
5Sunil Kulkarni开发870003
6Bhushan WaghR&D750002
7Paras Jaiswal营销320001

表 2:t2_employees

ID名称部门薪金工作经验年限
1Prashant WaghR&D490001
2Abhishek Pawar生产450001
3Gautam Jain开发560004
4Shubham Mahale帐户570002
5Rahul Thakur生产760004
6Bhushan WaghR&D750002
7Anand Singh营销280001

表 3:t_students

ID名称家乡百分比最喜欢的科目
1Soniya JainUdaipur89物理
2Harshada SharmaKanpur92化学
3Anuja Rajput斋浦尔78历史
4Pranali SinghNashik88地理学
5Renuka Deshmukh帕尼帕特90生物学
6Swati Kumari法里达巴德93英文
7Prachi Jaiswal古尔冈96印地语

表 4:t2_students

ID名称家乡百分比最喜欢的科目
1Soniya JainUdaipur89物理
2Ishwari Dixit德里86印地语
3Anuja Rajput斋浦尔78历史
4Pakhi AroraSurat70梵语
5Renuka Deshmukh帕尼帕特90生物学
6Jayshree PatelPune91数学
7Prachi Jaiswal古尔冈96印地语

1. UNION(并集)

  • UNION 用于组合两个 SELECT 语句的结果。
  • 执行 UNION 操作后,结果中的重复行将被消除。

示例 1

编写一个查询,对表 t_employees 和表 t2_employees 执行 UNION 操作。

查询

在这里,在一个查询中,我们编写了两个 SELECT 查询。第一个 SELECT 查询将从 t_employees 表中获取记录,并与第二个 SELECT 查询从 t2_employees 表中获取的记录执行 UNION 操作。

您将得到以下输出

ID名称部门薪金工作经验年限
1Aakash Singh开发720002
2Abhishek Pawar生产450001
3Pranav DeshmukhHR599003
4Shubham Mahale帐户570002
5Sunil Kulkarni开发870003
6Bhushan WaghR&D750002
7Paras Jaiswal营销320001
1Prashant WaghR&D490001
3Gautam Jain开发560004
5Rahul Thakur生产760004
7Anand Singh营销280001

由于我们对两个表执行了 UNION 操作,因此只显示了第一个和第二个表中的记录,重复记录除外。

示例 2

编写一个查询,对表 t_students 和表 t2_students 执行 UNION 操作。

查询

在这里,在一个查询中,我们编写了两个 SELECT 查询。第一个 SELECT 查询将从 t_students 表中获取记录,并与第二个 SELECT 查询从 t2_students 表中获取的记录执行 UNION 操作。

您将得到以下输出

ID名称部门薪金工作经验年限
1Soniya JainUdaipur89物理
2Harshada SharmaKanpur92化学
3Anuja Rajput斋浦尔78历史
4Pranali SinghNashik88地理学
5Renuka Deshmukh帕尼帕特90生物学
6Swati Kumari法里达巴德93英文
7Prachi Jaiswal古尔冈96印地语
2Ishwari Dixit德里86印地语
4Pakhi AroraSurat70梵语
6Jayshree PatelPune91数学

由于我们对两个表执行了 UNION 操作,因此只显示了第一个和第二个表中的记录,重复记录除外。

2. UNION ALL(全部并集)

  • 此运算符组合了两个查询中的所有记录。
  • 执行 UNION ALL 操作后,结果中的重复行将不会被消除。

示例 1

编写一个查询,对表 t_employees 和表 t2_employees 执行 UNION ALL 操作。

查询

在这里,在一个查询中,我们编写了两个 SELECT 查询。第一个 SELECT 查询将从 t_employees 表中获取记录,并与第二个 SELECT 查询从 t2_employees 表中获取的记录执行 UNION ALL 操作。

您将得到以下输出

ID名称部门薪金工作经验年限
1Aakash Singh开发720002
2Abhishek Pawar生产450001
3Pranav DeshmukhHR599003
4Shubham Mahale帐户570002
5Sunil Kulkarni开发870003
6Bhushan WaghR&D750002
7Paras Jaiswal营销320001
1Prashant WaghR&D490001
2Abhishek Pawar生产450001
3Gautam Jain开发560004
4Shubham Mahale帐户570002
5Rahul Thakur生产760004
6Bhushan WaghR&D750002
7Anand Singh营销280001

由于我们对两个表执行了 UNION ALL 操作,因此显示了第一个和第二个表中的所有记录,包括重复记录。

示例 2

编写一个查询,对表 t_students 和表 t2_students 执行 UNION ALL 操作。

查询

在这里,在一个查询中,我们编写了两个 SELECT 查询。第一个 SELECT 查询将从 t_students 表中获取记录,并与第二个 SELECT 查询从 t2_students 表中获取的记录执行 UNION ALL 操作。

您将得到以下输出

ID名称家乡百分比最喜欢的科目
1Soniya JainUdaipur89物理
2Harshada SharmaKanpur92化学
3Anuja Rajput斋浦尔78历史
4Pranali SinghNashik88地理学
5Renuka Deshmukh帕尼帕特90生物学
6Swati Kumari法里达巴德93英文
7Prachi Jaiswal古尔冈96印地语
1Soniya JainUdaipur89物理
2Ishwari Dixit德里86印地语
3Anuja Rajput斋浦尔78历史
4Pakhi AroraSurat70梵语
5Renuka Deshmukh帕尼帕特90生物学
6Jayshree PatelPune91数学
7Prachi Jaiswal古尔冈96印地语

由于我们对两个表执行了 UNION ALL 操作,因此显示了第一个和第二个表中的所有记录,包括重复记录。

3. INTERSECT(交集)

  • 它用于组合两个 SELECT 语句,但只返回两个 SELECT 语句中共同的记录。

示例 1

编写一个查询,对表 t_employees 和表 t2_employees 执行 INTERSECT 操作。

查询

在这里,在一个查询中,我们编写了两个 SELECT 查询。第一个 SELECT 查询将从 t_employees 表中获取记录,并与第二个 SELECT 查询从 t2_employees 表中获取的记录执行 INTERSECT 操作。

您将得到以下输出

ID名称家乡百分比最喜欢的科目
2Abhishek Pawar生产450001
4Shubham Mahale帐户570002
6Bhushan WaghR&D750002

由于我们对两个表执行了 INTERSECT 操作,因此只显示了两个表中的共同记录。

示例 2

编写一个查询,对表 t_students 和表 t2_students 执行 INTERSECT 操作。

查询

在这里,在一个查询中,我们编写了两个 SELECT 查询。第一个 SELECT 查询将从 t_students 表中获取记录,并与第二个 SELECT 查询从 t2_students 表中获取的记录执行 UNION 操作。

您将得到以下输出

ID名称家乡百分比最喜欢的科目
1Soniya JainUdaipur89物理
3Anuja Rajput斋浦尔78历史
5Renuka Deshmukh帕尼帕特90生物学
7Prachi Jaiswal古尔冈96印地语

由于我们对两个表执行了 INTERSECT 操作,因此只显示了两个表中的共同记录。

  1. MINUS(差集)
  • 它显示第一个查询中存在但第二个查询中不存在的行,不包含重复项。

示例 1

编写一个查询,对表 t_employees 和表 t2_employees 执行 MINUS(差集)操作。

查询

在这里,在一个查询中,我们编写了两个 SELECT 查询。第一个 SELECT 查询将从 t_employees 表中获取记录,并与第二个 SELECT 查询从 t2_employees 表中获取的记录执行 MINUS 操作。

您将得到以下输出

ID名称部门薪金工作经验年限
1Aakash Singh开发720002
3Pranav DeshmukhHR599003
5Sunil Kulkarni开发870003
7Paras Jaiswal营销320001

由于我们对两个表执行了 MINUS 操作,因此只显示了两个表中不匹配的记录。

示例 2

编写一个查询,对表 t_students 和表 t2_students 执行 MINUS 操作。

查询

在这里,在一个查询中,我们编写了两个 SELECT 查询。第一个 SELECT 查询将从 t_employees 表中获取记录,并与第二个 SELECT 查询从 t2_employees 表中获取的记录执行 UNION 操作。

您将得到以下输出

ID名称家乡百分比最喜欢的科目
2Harshada SharmaKanpur92化学
4Pranali SinghNashik88地理学
6Swati Kumari法里达巴德93英文

由于我们对两个表执行了 MINUS 操作,因此只显示了两个表中不匹配的记录。


下一主题SQL 命令类型