Oracle外聯接用法(轉)
Oracle外聯接用法(轉)[@more@]外部聯接"+"
Oracle總有一些突破標準SQL的新手段讓人耳目一新,既考慮了效率,寫起來又順手,只是普通的開發人員往往想不起來用到它.
外部聯接就是一種.此外,在後來的9i以上版本中還出現了幾種極其有效的新手段,功能強大而書寫又很簡潔,留待下次整理後貼出.
外部聯接其實早就出現了,但真正用到的有心人還是隻佔少數.當然,也不排除一些人是從移植性的角度去考慮而特地避開的情況.
外部聯接"+"的概念與用法
外部聯接"+"按其在"="的左邊或右邊分左聯接和右聯接.
若不帶"+"運算子的表中的一個行不直接匹配於帶"+"預算符的表中的任何行,則前者的行與後者中的一個空行相匹配並被返回.
若二者均不帶"+",則二者中無法匹配的均被返回.
利用外部聯接"+",可以替代效率十分低下的 not in 運算,大大提高執行速度.
舉出例項最說明問題——
例如,下面這條命令執行起來很慢
用外部聯接提高表連線的查詢速度
在作表連線(常用於檢視)時,常使用以下方法來查詢資料:
SELECT PAY_NO, PROJECT_NAME
FROM A
WHERE A.PAY_NO NOT IN (SELECT PAY_NO FROM B WHERE VALUE >=120000);
---- 如果表A有10000條記錄,表B有10000條記錄,在我的01年的老PC上要用掉差不多30分鐘多一點,因為 NOT IN 要進行一條一條的比較,共需要10000*10000 次比較後,才能得到結果。改用外部聯接,可大大縮短查詢時間,我機子上測試為1分左右:
SELECT PAY_NO, PROJECT_NAME
FROM A,B
WHERE A.PAY_NO=B.PAY_NO(+)
AND B.PAY_NO IS NULL
AND B.VALUE >=12000;
又比如:
select a.empno from emp a where a.empno not in
(select empno from emp1 where job=’SALE’);
若利用外部聯接,改寫命令如下:
select a.empno from emp a ,emp1 b
where a.empno=b.empno(+)
and b.empno is null
and b.job='SALE';
可以發現,執行速度明顯提高.
其實,如果從演算法的複雜度分析也可以明顯看出外部聯接的好處,相當於接近減少了一個維,例如10000*10000次,現在其中的一個10000變成個位數,複雜度數量級很快就下來了。
在應用中從效率出發注意這些工具的使用,對未來系統上線應用的效能提高會有很大的幫助。就好象你對oracle好,oracle也會對你好!
Oracle總有一些突破標準SQL的新手段讓人耳目一新,既考慮了效率,寫起來又順手,只是普通的開發人員往往想不起來用到它.
外部聯接就是一種.此外,在後來的9i以上版本中還出現了幾種極其有效的新手段,功能強大而書寫又很簡潔,留待下次整理後貼出.
外部聯接其實早就出現了,但真正用到的有心人還是隻佔少數.當然,也不排除一些人是從移植性的角度去考慮而特地避開的情況.
外部聯接"+"的概念與用法
外部聯接"+"按其在"="的左邊或右邊分左聯接和右聯接.
若不帶"+"運算子的表中的一個行不直接匹配於帶"+"預算符的表中的任何行,則前者的行與後者中的一個空行相匹配並被返回.
若二者均不帶"+",則二者中無法匹配的均被返回.
利用外部聯接"+",可以替代效率十分低下的 not in 運算,大大提高執行速度.
舉出例項最說明問題——
例如,下面這條命令執行起來很慢
用外部聯接提高表連線的查詢速度
在作表連線(常用於檢視)時,常使用以下方法來查詢資料:
SELECT PAY_NO, PROJECT_NAME
FROM A
WHERE A.PAY_NO NOT IN (SELECT PAY_NO FROM B WHERE VALUE >=120000);
---- 如果表A有10000條記錄,表B有10000條記錄,在我的01年的老PC上要用掉差不多30分鐘多一點,因為 NOT IN 要進行一條一條的比較,共需要10000*10000 次比較後,才能得到結果。改用外部聯接,可大大縮短查詢時間,我機子上測試為1分左右:
SELECT PAY_NO, PROJECT_NAME
FROM A,B
WHERE A.PAY_NO=B.PAY_NO(+)
AND B.PAY_NO IS NULL
AND B.VALUE >=12000;
又比如:
select a.empno from emp a where a.empno not in
(select empno from emp1 where job=’SALE’);
若利用外部聯接,改寫命令如下:
select a.empno from emp a ,emp1 b
where a.empno=b.empno(+)
and b.empno is null
and b.job='SALE';
可以發現,執行速度明顯提高.
其實,如果從演算法的複雜度分析也可以明顯看出外部聯接的好處,相當於接近減少了一個維,例如10000*10000次,現在其中的一個10000變成個位數,複雜度數量級很快就下來了。
在應用中從效率出發注意這些工具的使用,對未來系統上線應用的效能提高會有很大的幫助。就好象你對oracle好,oracle也會對你好!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617542/viewspace-961530/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [轉]關於oracle with as用法Oracle
- (轉)Oracle Hint的用法Oracle
- oracle----sqlldr用法(轉)OracleSQL
- 瞭解巢狀迴圈聯接、合併聯接巢狀
- 【轉】Oracle JOB 用法小結Oracle
- Oracle左外連線、右外連線、完全外連線以及(+)號用法Oracle
- T-SQL學習中–內聯接,外連線,交叉連線SQL
- 解決一個.NET聯接SQL的問題 (轉)SQL
- oracle臨時表的用法(轉)Oracle
- ORACLE 中ROWNUM用法總結! (轉)Oracle
- Oracle 外來鍵的級聯處理Oracle
- 我和我的智慧聯接
- 【SQL】Oracle查詢轉換之 OR用法SQLOracle
- 【轉】oracle的substr函式的用法Oracle函式
- oracle-merge用法詳解 (轉)Oracle
- 轉接頭
- Oracle行列轉換及pivot子句的用法Oracle
- oracle 體系 & hints的用法總結(轉)Oracle
- ORACLE 中ROWNUM(偽列)用法解析(轉載)Oracle
- oracle left outer join(左聯接)顯示全部的課堂收藏資訊Oracle
- Oracle資料庫聯接(inner join ,outer join)和NOT IN的特殊情況Oracle資料庫
- ORACLE WITH AS 用法Oracle
- 聯接改變世界!新華三綠洲平臺釋出共建WiFi聯接新生態WiFi
- [轉載] Oracle:start with...connect by子句的用法Oracle
- “哥倫布”華為,與智慧聯接新大陸
- oracle中的級聯刪除(轉)Oracle
- 轉:oracle 9i/10g merge 用法Oracle
- ORACLE SEQUENCE用法Oracle
- oracle cast 用法OracleAST
- oracle job用法Oracle
- oracle restrice用法OracleREST
- 星閃:咫尺之間,聯接智慧世界
- SQL入門之1 select 聯接SQL
- oracle聯機熱備份的原理(轉)Oracle
- 內聯,左外聯,右外聯,全連線,交叉連線 的區別
- 【原】Oracle中Left Outer Join和外關聯(+)的區別Oracle
- Html 內聯元素和外聯元素HTML
- IDC:預測2024年全球物聯網聯接量接近650億 是手機聯接量的11.4倍