SQL 中的 SET 运算符2025年3月17日 | 阅读 7 分钟 集合运算符是一种特殊类型的运算符,用于组合两个查询的结果。 集合运算符包括: - UNION
- UNION ALL
- INTERSECT
- MINUS(差集)
 在 SQL 中使用集合运算符执行操作必须遵循某些规则。规则如下: - 列的数量和顺序必须相同。
- 数据类型必须兼容。
让我们通过示例更详细地了解每个集合运算符。 所有示例都将使用 MySQL 数据库编写。 假设我们有以下表格和给定数据。 表 1:t_employees ID | 名称 | 部门 | 薪金 | 工作经验年限 |
---|
1 | Aakash Singh | 开发 | 72000 | 2 | 2 | Abhishek Pawar | 生产 | 45000 | 1 | 3 | Pranav Deshmukh | HR | 59900 | 3 | 4 | Shubham Mahale | 帐户 | 57000 | 2 | 5 | Sunil Kulkarni | 开发 | 87000 | 3 | 6 | Bhushan Wagh | R&D | 75000 | 2 | 7 | Paras Jaiswal | 营销 | 32000 | 1 |
表 2:t2_employees ID | 名称 | 部门 | 薪金 | 工作经验年限 |
---|
1 | Prashant Wagh | R&D | 49000 | 1 | 2 | Abhishek Pawar | 生产 | 45000 | 1 | 3 | Gautam Jain | 开发 | 56000 | 4 | 4 | Shubham Mahale | 帐户 | 57000 | 2 | 5 | Rahul Thakur | 生产 | 76000 | 4 | 6 | Bhushan Wagh | R&D | 75000 | 2 | 7 | Anand Singh | 营销 | 28000 | 1 |
表 3:t_students ID | 名称 | 家乡 | 百分比 | 最喜欢的科目 |
---|
1 | Soniya Jain | Udaipur | 89 | 物理 | 2 | Harshada Sharma | Kanpur | 92 | 化学 | 3 | Anuja Rajput | 斋浦尔 | 78 | 历史 | 4 | Pranali Singh | Nashik | 88 | 地理学 | 5 | Renuka Deshmukh | 帕尼帕特 | 90 | 生物学 | 6 | Swati Kumari | 法里达巴德 | 93 | 英文 | 7 | Prachi Jaiswal | 古尔冈 | 96 | 印地语 |
表 4:t2_students ID | 名称 | 家乡 | 百分比 | 最喜欢的科目 |
---|
1 | Soniya Jain | Udaipur | 89 | 物理 | 2 | Ishwari Dixit | 德里 | 86 | 印地语 | 3 | Anuja Rajput | 斋浦尔 | 78 | 历史 | 4 | Pakhi Arora | Surat | 70 | 梵语 | 5 | Renuka Deshmukh | 帕尼帕特 | 90 | 生物学 | 6 | Jayshree Patel | Pune | 91 | 数学 | 7 | Prachi Jaiswal | 古尔冈 | 96 | 印地语 |
1. UNION(并集)- UNION 用于组合两个 SELECT 语句的结果。
- 执行 UNION 操作后,结果中的重复行将被消除。
示例 1 编写一个查询,对表 t_employees 和表 t2_employees 执行 UNION 操作。 查询 在这里,在一个查询中,我们编写了两个 SELECT 查询。第一个 SELECT 查询将从 t_employees 表中获取记录,并与第二个 SELECT 查询从 t2_employees 表中获取的记录执行 UNION 操作。 您将得到以下输出 ID | 名称 | 部门 | 薪金 | 工作经验年限 |
---|
1 | Aakash Singh | 开发 | 72000 | 2 | 2 | Abhishek Pawar | 生产 | 45000 | 1 | 3 | Pranav Deshmukh | HR | 59900 | 3 | 4 | Shubham Mahale | 帐户 | 57000 | 2 | 5 | Sunil Kulkarni | 开发 | 87000 | 3 | 6 | Bhushan Wagh | R&D | 75000 | 2 | 7 | Paras Jaiswal | 营销 | 32000 | 1 | 1 | Prashant Wagh | R&D | 49000 | 1 | 3 | Gautam Jain | 开发 | 56000 | 4 | 5 | Rahul Thakur | 生产 | 76000 | 4 | 7 | Anand Singh | 营销 | 28000 | 1 |
由于我们对两个表执行了 UNION 操作,因此只显示了第一个和第二个表中的记录,重复记录除外。 示例 2 编写一个查询,对表 t_students 和表 t2_students 执行 UNION 操作。 查询 在这里,在一个查询中,我们编写了两个 SELECT 查询。第一个 SELECT 查询将从 t_students 表中获取记录,并与第二个 SELECT 查询从 t2_students 表中获取的记录执行 UNION 操作。 您将得到以下输出 ID | 名称 | 部门 | 薪金 | 工作经验年限 |
---|
1 | Soniya Jain | Udaipur | 89 | 物理 | 2 | Harshada Sharma | Kanpur | 92 | 化学 | 3 | Anuja Rajput | 斋浦尔 | 78 | 历史 | 4 | Pranali Singh | Nashik | 88 | 地理学 | 5 | Renuka Deshmukh | 帕尼帕特 | 90 | 生物学 | 6 | Swati Kumari | 法里达巴德 | 93 | 英文 | 7 | Prachi Jaiswal | 古尔冈 | 96 | 印地语 | 2 | Ishwari Dixit | 德里 | 86 | 印地语 | 4 | Pakhi Arora | Surat | 70 | 梵语 | 6 | Jayshree Patel | Pune | 91 | 数学 |
由于我们对两个表执行了 UNION 操作,因此只显示了第一个和第二个表中的记录,重复记录除外。 2. UNION ALL(全部并集)- 此运算符组合了两个查询中的所有记录。
- 执行 UNION ALL 操作后,结果中的重复行将不会被消除。
示例 1 编写一个查询,对表 t_employees 和表 t2_employees 执行 UNION ALL 操作。 查询 在这里,在一个查询中,我们编写了两个 SELECT 查询。第一个 SELECT 查询将从 t_employees 表中获取记录,并与第二个 SELECT 查询从 t2_employees 表中获取的记录执行 UNION ALL 操作。 您将得到以下输出 ID | 名称 | 部门 | 薪金 | 工作经验年限 |
---|
1 | Aakash Singh | 开发 | 72000 | 2 | 2 | Abhishek Pawar | 生产 | 45000 | 1 | 3 | Pranav Deshmukh | HR | 59900 | 3 | 4 | Shubham Mahale | 帐户 | 57000 | 2 | 5 | Sunil Kulkarni | 开发 | 87000 | 3 | 6 | Bhushan Wagh | R&D | 75000 | 2 | 7 | Paras Jaiswal | 营销 | 32000 | 1 | 1 | Prashant Wagh | R&D | 49000 | 1 | 2 | Abhishek Pawar | 生产 | 45000 | 1 | 3 | Gautam Jain | 开发 | 56000 | 4 | 4 | Shubham Mahale | 帐户 | 57000 | 2 | 5 | Rahul Thakur | 生产 | 76000 | 4 | 6 | Bhushan Wagh | R&D | 75000 | 2 | 7 | Anand Singh | 营销 | 28000 | 1 |
由于我们对两个表执行了 UNION ALL 操作,因此显示了第一个和第二个表中的所有记录,包括重复记录。 示例 2 编写一个查询,对表 t_students 和表 t2_students 执行 UNION ALL 操作。 查询 在这里,在一个查询中,我们编写了两个 SELECT 查询。第一个 SELECT 查询将从 t_students 表中获取记录,并与第二个 SELECT 查询从 t2_students 表中获取的记录执行 UNION ALL 操作。 您将得到以下输出 ID | 名称 | 家乡 | 百分比 | 最喜欢的科目 |
---|
1 | Soniya Jain | Udaipur | 89 | 物理 | 2 | Harshada Sharma | Kanpur | 92 | 化学 | 3 | Anuja Rajput | 斋浦尔 | 78 | 历史 | 4 | Pranali Singh | Nashik | 88 | 地理学 | 5 | Renuka Deshmukh | 帕尼帕特 | 90 | 生物学 | 6 | Swati Kumari | 法里达巴德 | 93 | 英文 | 7 | Prachi Jaiswal | 古尔冈 | 96 | 印地语 | 1 | Soniya Jain | Udaipur | 89 | 物理 | 2 | Ishwari Dixit | 德里 | 86 | 印地语 | 3 | Anuja Rajput | 斋浦尔 | 78 | 历史 | 4 | Pakhi Arora | Surat | 70 | 梵语 | 5 | Renuka Deshmukh | 帕尼帕特 | 90 | 生物学 | 6 | Jayshree Patel | Pune | 91 | 数学 | 7 | Prachi Jaiswal | 古尔冈 | 96 | 印地语 |
由于我们对两个表执行了 UNION ALL 操作,因此显示了第一个和第二个表中的所有记录,包括重复记录。 3. INTERSECT(交集)- 它用于组合两个 SELECT 语句,但只返回两个 SELECT 语句中共同的记录。
示例 1 编写一个查询,对表 t_employees 和表 t2_employees 执行 INTERSECT 操作。 查询 在这里,在一个查询中,我们编写了两个 SELECT 查询。第一个 SELECT 查询将从 t_employees 表中获取记录,并与第二个 SELECT 查询从 t2_employees 表中获取的记录执行 INTERSECT 操作。 您将得到以下输出 ID | 名称 | 家乡 | 百分比 | 最喜欢的科目 |
---|
2 | Abhishek Pawar | 生产 | 45000 | 1 | 4 | Shubham Mahale | 帐户 | 57000 | 2 | 6 | Bhushan Wagh | R&D | 75000 | 2 |
由于我们对两个表执行了 INTERSECT 操作,因此只显示了两个表中的共同记录。 示例 2 编写一个查询,对表 t_students 和表 t2_students 执行 INTERSECT 操作。 查询 在这里,在一个查询中,我们编写了两个 SELECT 查询。第一个 SELECT 查询将从 t_students 表中获取记录,并与第二个 SELECT 查询从 t2_students 表中获取的记录执行 UNION 操作。 您将得到以下输出 ID | 名称 | 家乡 | 百分比 | 最喜欢的科目 |
---|
1 | Soniya Jain | Udaipur | 89 | 物理 | 3 | Anuja Rajput | 斋浦尔 | 78 | 历史 | 5 | Renuka Deshmukh | 帕尼帕特 | 90 | 生物学 | 7 | Prachi Jaiswal | 古尔冈 | 96 | 印地语 |
由于我们对两个表执行了 INTERSECT 操作,因此只显示了两个表中的共同记录。 - MINUS(差集)
- 它显示第一个查询中存在但第二个查询中不存在的行,不包含重复项。
示例 1 编写一个查询,对表 t_employees 和表 t2_employees 执行 MINUS(差集)操作。 查询 在这里,在一个查询中,我们编写了两个 SELECT 查询。第一个 SELECT 查询将从 t_employees 表中获取记录,并与第二个 SELECT 查询从 t2_employees 表中获取的记录执行 MINUS 操作。 您将得到以下输出 ID | 名称 | 部门 | 薪金 | 工作经验年限 |
---|
1 | Aakash Singh | 开发 | 72000 | 2 | 3 | Pranav Deshmukh | HR | 59900 | 3 | 5 | Sunil Kulkarni | 开发 | 87000 | 3 | 7 | Paras Jaiswal | 营销 | 32000 | 1 |
由于我们对两个表执行了 MINUS 操作,因此只显示了两个表中不匹配的记录。 示例 2 编写一个查询,对表 t_students 和表 t2_students 执行 MINUS 操作。 查询 在这里,在一个查询中,我们编写了两个 SELECT 查询。第一个 SELECT 查询将从 t_employees 表中获取记录,并与第二个 SELECT 查询从 t2_employees 表中获取的记录执行 UNION 操作。 您将得到以下输出 ID | 名称 | 家乡 | 百分比 | 最喜欢的科目 |
---|
2 | Harshada Sharma | Kanpur | 92 | 化学 | 4 | Pranali Singh | Nashik | 88 | 地理学 | 6 | Swati Kumari | 法里达巴德 | 93 | 英文 |
由于我们对两个表执行了 MINUS 操作,因此只显示了两个表中不匹配的记录。
|