前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于oracle中的半连接(r3笔记55天)

关于oracle中的半连接(r3笔记55天)

作者头像
jeanron100
发布2018-03-15 10:11:53
6460
发布2018-03-15 10:11:53
举报

表的连接在sql语句中尤为重要。外连接,内连接,半连接,反连接等等各种连接,看似简单的一个连接里面还是有不少的细节的。对于sql调优来说也是很重要的。 像下面的形式的sql就属于半连接,使用了in子句,对于exists的实现也是属于半连接。

代码语言:javascript
复制
--in半连接
SQL> select dname from dept dept where deptno in (select deptno  from emp emp);
DNAME
--------------
RESEARCH
SALES
ACCOUNTING

--exists半连接
SQL> select dname from dept dept where exists (select null from emp emp  where emp.deptno=dept.deptno)
  2  /
DNAME
--------------
RESEARCH
SALES
ACCOUNTING

可能对于上面两种连接大家不以为然,认为把需要用到的表直接放在from子句后效果是一致的,答案也不是肯定的。 比如下面的形式,可能输出的结果就多了很多。大概14条记录,但是通过半连接的方式会输出3行记录。

代码语言:javascript
复制
SQL>  select dept.dname from dept  dept,emp empwhere dept.deptno=emp.deptno;  
DNAME
--------------
RESEARCH
SALES
SALES
RESEARCH
SALES
SALES
ACCOUNTING
RESEARCH
ACCOUNTING
SALES
RESEARCH
SALES
RESEARCH
ACCOUNTING
14  rows selected.

所以说如果要得到一个相同的输出结果,还是需要distinct+inner join

SQL> select distinct dept.dname from dept dept,emp emp where dept.deptno=emp.deptno;

DNAME -------------- ACCOUNTING RESEARCH SALES 对于半连接的可替换实现,大体有以下几种方式

代码语言:javascript
复制
--使用集合
select dept.dname from dept dept,
(select deptno from  dept
intersect
select deptno from emp emp)b
where dept.deptno=b.deptno  ;
DNAME
--------------
ACCOUNTING
RESEARCH
SALES

--使用any
SQL> select dept.dname from dept dept where deptno=any(select deptno from emp emp);
DNAME
--------------
RESEARCH
SALES
ACCOUNTING

--使用distinct和内连接
SQL> select distinct emp.deptno  from dept dept,emp emp
    where dept.deptno=emp.deptno;
     DEPTNO
----------
        30
        20
        10
SQL> select  distinct dept.deptno from dept  dept,emp emp
        where dept.deptno=emp.deptno;
     DEPTNO
----------
        30
        20
        10

大体说了下关于半连接的一些实现,可能在实际的使用中,最直观的感受还是通过执行计划来看到。 启用了半连接,在执行计划中会有semi的字样。

也可以手动指定不需要走半连接。使用Hint no_semijoin

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-11-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档