SQL 查找两个表中相同的行,你想找出两个表中相同的行,但需要连接多列。
SQL 查找两个表中相同的行 问题描述
你想找出两个表中相同的行,但需要连接多列。例如,考虑如下所示的视图 V
。
视图 V
只包含职位是 CLERK
的员工,但并没有显示 EMP
表中所有可能的列。你想从 EMP
表获取与视图 V
相匹配的全部员工的 EMPNO
、ENAME
、JOB
、SAL
和 DEPTNO
,并且希望得到如下所示的结果集。
SQL 查找两个表中相同的行 解决方案
把多个表中所有必要的列都连接起来,以获得正确的结果。也可以使用集合运算 INTERSECT
来替代连接查询,并返回两个表的交集(相同的行)。
MySQL 和 SQL Server
使用多个条件把 EMP
表和视图 V
连接起来。
除此之外,也可以使用 JOIN
子句执行同样的连接查询。
DB2、Oracle 和 PostgreSQL
针对 MySQL 和 SQL Server 的解决方案也适用于 DB2、Oracle 和 PostgreSQL。如果你希望从视图 V
查询数据,就需要使用该方案。
如果你不需要检索视图 V
的某些列,可以使用集合运算 INTERSECT
和谓词 IN
。
SQL 查找两个表中相同的行 扩展知识
当执行连接查询时,为了得到正确的结果,必须慎重考虑要把哪些列作为连接项。当参与连接的行集里的某些列可能有共同值,而其他列有不同值的时候,这一点尤为重要。
集合运算 INTERSECT
会返回两个行集的相同部分。在使用 INTERSECT
时,必须保证两个表里参与比较的项目数目是相同的,并且数据类型也是相同的。注意,当执行集合运算时,默认不会返回重复项。