oracle左连接等价改写,[原]关于left join 和rigt join 的理解实验

explain plan for select emp.empno,emp.ename,dept.deptno,dept.dname

from emp

full join dept on dept.deptno=emp.deptno;

select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT

----------------------------------------------------------------------------------

Plan hash value: 51889263

----------------------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

----------------------------------------------------------------------------------

| 0 | SELECT STATEMENT | | 15 | 630 | 6 (0)| 00:00:01 |

| 1 | VIEW | VW_FOJ_0 | 15 | 630 | 6 (0)| 00:00:01 |

|* 2 | HASH JOIN FULL OUTER| | 15 | 390 | 6 (0)| 00:00:01 |

| 3 | TABLE ACCESS FULL | DEPT | 4 | 52 | 3 (0)| 00:00:01 |

| 4 | TABLE ACCESS FULL | EMP | 14 | 182 | 3 (0)| 00:00:01 |

----------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

2 - access("DEPT"."DEPTNO"="EMP"."DEPTNO")

16 rows selected.

explain plan for select emp.empno,emp.ename,dept.deptno,dept.dname

from emp

left join dept on dept.deptno = emp.deptno

union all

select emp.empno,emp.ename,dept.deptno,dept.dname

from emp

right join dept on dept.deptno = emp.deptno

where emp.empno is null;

select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT

------------------------------------------------------------------------------------------

Plan hash value: 315464403

------------------------------------------------------------------------------------------

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

------------------------------------------------------------------------------------------

| 0 | SELECT STATEMENT | | 15 | 390 | 12 (9)| 00:00:01 |

| 1 | UNION-ALL | | | | | |

|* 2 | HASH JOIN OUTER | | 14 | 364 | 6 (0)| 00:00:01 |

| 3 | TABLE ACCESS FULL | EMP | 14 | 182 | 3 (0)| 00:00:01 |

| 4 | TABLE ACCESS FULL | DEPT | 4 | 52 | 3 (0)| 00:00:01 |

|* 5 | FILTER | | | | | |

| 6 | MERGE JOIN OUTER | | 1 | 26 | 6 (17)| 00:00:01 |

| 7 | TABLE ACCESS BY INDEX ROWID| DEPT | 4 | 52 | 2 (0)| 00:00:01 |

| 8 | INDEX FULL SCAN | PK_DEPT | 4 | | 1 (0)| 00:00:01 |

|* 9 | SORT JOIN | | 14 | 182 | 4 (25)| 00:00:01 |

| 10 | TABLE ACCESS FULL | EMP | 14 | 182 | 3 (0)| 00:00:01 |

------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):

---------------------------------------------------

2 - access("DEPT"."DEPTNO"(+)="EMP"."DEPTNO")

5 - filter("EMP"."EMPNO" IS NULL)

9 - access("DEPT"."DEPTNO"="EMP"."DEPTNO"(+))

filter("DEPT"."DEPTNO"="EMP"."DEPTNO"(+))

25 rows selected.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值