ITPub博客

首页 > IT职业 > IT生活 > outer join学习笔记

outer join学习笔记

原创 IT生活 作者:zhyuh 时间:2006-06-22 14:20:40 0 删除 编辑
以scott用户下的表为例,其中的表纪录内容有所变动。[@more@]

emp表有6条记录,其中Blake员工对应的部门号为空。
SQL> col deptno format a10
SQL> select empno,ename,nvl(to_char(deptno),'null') deptno from emp;

SQL> col deptno format 999999
SQL> select * from dept;


现在查询所有员工和所属部门信息,没有部门的员工也要列出来。
使用outer join:
SQL> list
1 select nvl(to_char(e.deptno),'null') dept_no,nvl(d.dname,'null'),e.empno,e.ename
2 from emp e, dept d
3* where e.deptno=d.deptno(+)
SQL> /

查看执行计划:

和一般的join类似,outer join包含Nested loop outer join(上面的执行计划中),Hash join outer join和Sort merge outer join。

**Nested loop outer join
查询优化器在满足下面条件时会采用nested loop outer join:
1. It is possible to drive from the outer table to inner table.
2. Data volume is low enough to make the nested loop method efficient.

nested loop一般都根据成本来选择驱动表(outer table)和被驱动表(inner table)。但是在nested loop outer join中,(+)另一侧的表始终是outer table,而有(+)的一侧表始终是inner table。上面例子中,无论emp和dept表的记录数为多少,emp始终outer table,也即driving table,而dept表始终为inner table(driven table)。

**Hash join outer join
查询优化器在下面情况下会使用Hash join outer join
1. the data volume is high enough to make the hash join method efficient
2. it is not possible to drive from the outer table to inner table

查询优化器根据成本决定outer table/inner table。

**Sort merge outer join
查询优化器选择sort merge outer join 的情况:
1. If a nested loop join is inefficient. A nested loop join can be inefficient because of data volumes.
2. The optimizer finds it is cheaper to use a sort merge over a hash join because of sorts already required by other operations


**nested loop join简介**
上面例子的nested loop中,emp作为驱动表(driving table),也叫outer table。dept作为被驱动表(driven table),也叫inner table。(+)前面的列叫outer join column。

在nest loop join的执行计划中,outer loop先于inner loop:

上面执行计划中的outer_loop是

select nvl(to_char(e.deptno),'null') dept_no,e.empno,e.ename
from emp e

上面执行计划中的inner_loop是

select nvl(d.dname,'null')
from dept d
where e.deptno=d.deptno(+)

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/207/viewspace-844932/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    233
  • 访问量
    2012795