SQL 查找两个表中相同的行

文章介绍了如何在数据库中找出两个表中相同行的方法,包括使用连接查询和INTERSECT集合运算。通过示例展示了如何从EMP表获取与视图V匹配的全部员工信息,强调了在选择连接列和处理可能的共同值时的注意事项。同时提到了JOIN子句的使用以及在不同数据库系统中的适用性。
摘要由CSDN通过智能技术生成

描述:

你想找出两个表中相同的行,但需要连接多列。例如,考虑如下所示的视图 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 相匹配的全部员工的 EMPNOENAMEJOBSAL 和 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 时,必须保证两个表里参与比较的项目数目是相同的,并且数据类型也是相同的。注意,当执行集合运算时,默认不会返回重复项。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值