SQL 查找两个表中相同的行 您所在的位置:网站首页 两列数据匹配重复数据 SQL 查找两个表中相同的行

SQL 查找两个表中相同的行

2023-03-17 05:35| 来源: 网络整理| 查看: 265

描述:

你想找出两个表中相同的行,但需要连接多列。例如,考虑如下所示的视图 V。

create view V as select ename,job,sal from emp where job = 'CLERK'   select * from V   ENAME JOB SAL ---------- --------- ---------- SMITH CLERK 800 ADAMS CLERK 1100 JAMES CLERK 950 MILLER CLERK 1300

视图 V 只包含职位是 CLERK 的员工,但并没有显示 EMP 表中所有可能的列。你想从 EMP 表获取与视图 V 相匹配的全部员工的 EMPNO、ENAME、JOB、SAL 和 DEPTNO,并且希望得到如下所示的结果集。

方法:

把多个表中所有必要的列都连接起来,以获得正确的结果。也可以使用集合运算 INTERSECT 来替代连接查询,并返回两个表的交集(相同的行)。MySQL 和 SQL Server 使用多个条件把 EMP 表和视图 V 连接起来。

1 select e.empno,e.ename,e.job,e.sal,e.deptno 2 from emp e, V 3 where e.ename = v.ename 4 and e.job = v.job 5 and e.sal = v.sal

 除此之外,也可以使用 JOIN 子句执行同样的连接查询。

1 select e.empno,e.ename,e.job,e.sal,e.deptno 2 from emp e join V 3 on ( e.ename = v.ename 4 and e.job = v.job 5 and e.sal = v.sal )

DB2、Oracle 和 PostgreSQL 针对 MySQL 和 SQL Server 的解决方案也适用于 DB2、Oracle 和 PostgreSQL。如果你希望从视图 V 查询数据,就需要使用该方案。 如果你不需要检索视图 V 的某些列,可以使用集合运算 INTERSECT 和谓词 IN。 

1 select empno,ename,job,sal,deptno 2 from emp 3 where (ename,job,sal) in ( 4 select ename,job,sal from emp 5 intersect 6 select ename,job,sal from V 7 ) 扩展知识:

当执行连接查询时,为了得到正确的结果,必须慎重考虑要把哪些列作为连接项。当参与连接的行集里的某些列可能有共同值,而其他列有不同值的时候,这一点尤为重要。 集合运算 INTERSECT 会返回两个行集的相同部分。在使用 INTERSECT 时,必须保证两个表里参与比较的项目数目是相同的,并且数据类型也是相同的。注意,当执行集合运算时,默认不会返回重复项。 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有