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

 
EmployeeIDNameDepartment
1 John Doe IT
2 Jane Smith HR
3 Mike Brown Finance

表:ProjectA_Team

 
MemberIDMemberNameRole
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') ❌ 否

查询结果:

EmployeeIDNameDepartment
1 John Doe IT

 

posted @ 2025-11-19 15:32  chao_xiong  阅读(4)  评论(0)    收藏  举报