17、 INTERSECT 返回 两个select查询结果集的交集
1、 INTERSECT
返回 两个select查询结果集的交集,即同时出现在两个 SELECT 语句结果中的行。
- INTERSECT(以及 UNION、EXCEPT)比较的是“列的位置和值”,而不是“列名”。只要列的数量相同、对应位置的数据类型兼容,就可以比较 —— 列名完全无关!
- 自动去重
- 是按“整行”进行比较的 —— 所有被 SELECT 查询的列共同决定是否相等。所有对应位置的值必须完全相等才会被认为是交集
SELECT column1, column2, ... FROM table1 INTERSECT SELECT column1, column2, ... FROM table2;
-
列数必须相同:所有
SELECT语句必须拥有相同数量的列 -
数据类型必须兼容:对应列的数据类型必须相似
-
列的顺序必须一致:各
SELECT语句中列的顺序必须对应 -
最终结果集的列名:来自第一个
SELECT语句的列名
表:FullTime_Employees
| EmployeeID | Name | Department |
|---|---|---|
| 1 | John Doe | IT |
| 2 | Jane Smith | HR |
| 3 | Mike Brown | Finance |
表:ProjectA_Team
| MemberID | MemberName | Role |
|---|---|---|
| 1 | John Doe | IT |
| 3 | Mike Brown | Analyst |
| 4 | Sarah Chen | Designer |
找出既是全职员工又在项目A团队中的人:
SELECT EmployeeID, Name, Department -- 列名:EmployeeID, Name, Department FROM FullTime_Employees INTERSECT SELECT MemberID, MemberName, Role -- 列名:MemberID, MemberName, Role FROM ProjectA_Team;
数据库会比较所有三列的值(按位置):
| 行 | 全职员工三元组 | 项目A三元组 | 是否相等? |
|---|---|---|---|
| 1 | (1, 'John Doe', 'IT') | (1, 'John Doe', 'IT') | ✅ 是! |
| 2 | (3, 'Mike Brown', 'Finance') | (3, 'Mike Brown', 'Analyst') | ❌ 否 |
查询结果:
| EmployeeID | Name | Department |
|---|---|---|
| 1 | John Doe | IT |
本文来自博客园,作者:chao_xiong,转载请注明原文链接:https://www.cnblogs.com/chao-xiong/p/19242797

浙公网安备 33010602011771号