当前位置: 代码迷 >> Oracle管理 >> ORACLE join 使用與功能
  详细解决方案

ORACLE join 使用與功能

热度:83   发布时间:2016-04-24 04:12:14.0
ORACLE join 使用與效能
1.INNER使用 ON 或 WHERE 

select EMP.empid,EMP.empname,EMP.deptno,
depart.deptno,depart.loc
from EMP,depart
where EMP.deptno=depart.deptno;

select EMP.empid,EMP.empname,EMP.deptno,
depart.deptno,depart.loc
from EMP INNER JOIN depart
ON   EMP.deptno=depart.deptno;

這2個效能有差嗎?

---------
2.OUTTER JOIN 

select e.empname, e.deptno, d.depname
from emp e, depart d
where e.deptno(+) = d.deptno 
and d.deptno = 99;

select e.empname, e.deptno, d.depname
from emp e right join depart d
on  e.deptno = d.deptno 
where d.deptno = 99;

這2個效能有差嗎?
還是  用(+),有何特別用途?

----------

3.使用 INNER JOIN 效能 會比 LEFT JOIN 效能好嗎?
------解决思路----------------------
 (+) 是oracle 的写法,并不是标准的sql。 
(+)在左边 是右连接,在右边是 左连接。
至于效率问题,看一下执行计划就知道了
------解决思路----------------------
1.INNER使用 ON 或 WHERE 
SQL code
?
1
2
3
4
5
6
7
8
9
select EMP.empid,EMP.empname,EMP.deptno,
depart.deptno,depart.loc
from EMP,depart
where EMP.deptno=depart.deptno;

select EMP.empid,EMP.empname,EMP.deptno,
depart.deptno,depart.loc
from EMP INNER JOIN depart
ON   EMP.deptno=depart.deptno;

這2個效能有差嗎?

---------
2.OUTTER JOIN 
SQL code
?
1
2
3
4
5
6
7
8
9
select e.empname, e.deptno, d.depname
from emp e, depart d
where e.deptno(+) = d.deptno 
and d.deptno = 99;

select e.empname, e.deptno, d.depname
from emp e right join depart d
on  e.deptno = d.deptno 
where d.deptno = 99;

两种不同的写法,效率应该没有差别,oracle解析时会对sql进行重写, 可以看一下执行计划



3.使用 INNER JOIN 效能 會比 LEFT JOIN 效能好嗎?
inner join 效率会比left join 效率高,应为left join 需要对一个表进行全表扫描,不是绝对,根据实际情况




------解决思路----------------------
1、2、两组写法效能应该是一样的
3、一般情况下inner join 效率会比left join 效率高
------解决思路----------------------
引用:
您好:
我可以理解 具體情況可能會不一樣,不過至少有一個基礎概念,比如說 一般會先考慮INNER JOIN。

請想先確定一下 "inner join 效率会比left join 效率高 ...." 這一句話的解釋

以及,SQL DEVELOPER 的執行計畫是否 就是「說明計畫」?
這與PL/SQL DEVELOPER 所看到的介面是否相同?

以及來未該如何看 執行計畫 來分析(先有入門,再談理論與經驗)!

謝謝!

說明計劃應該就是執行計劃了,explain plan.
學習看執行計劃,網上很多資料先看看,主要是各種掃描方式和連接方式以及順序
  相关解决方案