1. 程式人生 > >oracle 的left join和(+)真的可以起到一樣的效果嗎?

oracle 的left join和(+)真的可以起到一樣的效果嗎?



select * from a,b where a.id=b.id(+);    --左連線,a表為主     from tableA, tableB where a.xx=b.xx(+)
select * from a left join b on a.id=b.id;  --   tableA left join tableB on a.xxx=b.xxx

很多資料說上面兩個語句的效果是一樣的,實際上今天經過測試發現兩者的執行計劃大不相同(查詢結果是一樣的);
至於為什麼會這樣,暫時沒有深究,手頭的一個例子表明按照第一種寫法的效率會高,

或許其他的例子結果不一樣,等有時間的時候再測試一下吧.

這個比較細微,我儘量回答。
總的來說,2種寫法,在oracle 裡,效率和效能區別不大。
如果非要比較的話,大概有以下區別:
(+) 和 left join ,在檢索顯示的欄位很少的時候,或者乾脆就是檢索count(*)的時候,

在效率和效能上,是一樣,甚至cpucost都完全一樣;
但是在檢索顯示的欄位比較多得時候,第一次執行,left join 比(+)的效率高;

當然,執行第二次之後,由於資料已經到了快取,區別也不明顯了,基本是一致的。

相關推薦

oracleleft join(+)真的可以起到一樣效果?

 select * from a,b where a.id=b.id(+);    --左連線,a表為主     from tableA, tableB where a.xx=b.xx(+) select * from a left join b on a.id=b.i

oracleleft joininner join的區別

1.left join表示以左表為參考,匹配右表的記錄,右表沒有的補空;最終查詢記錄條數為左表的條數; 2.inner join表示查詢所有匹配的記錄,即兩表中的所有匹配記錄都會得到;如果查詢的欄位在匹配的結果中為空則不會得到; 舉例說明區別: A表student id n

left join on 的區別

wid color left join where 單表查詢 不同 決定 width aaa SQL中on條件與where條件的區別 在使用left jion時,on和where條件的區別如下: 1、 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為

sql中inexist語句的區別?(補充了left joinright join)

有用 表數 from 部分匹配 exist 循環 targe 從表 exists in和exists(摘錄自百度)in 是把外表和內表作hash 連接,而exists是對外表作loop循環,每次loop循環再對內表進行查詢。如果兩個表中一個較小,一個是大表,則子查詢表大的用

left join on後面 加條件where後面加條件的區別 inner joinleft join right join之間的區別

上一篇對三個join的語句做了一個區別,如果連最基礎的都不清楚,那麼請先參考:inner join 與 left join 和right join之間的區別 碰巧在專案中遇到了一個sql,是left join和where的條件限制的區別,想了好半天,這裡做一下筆記,萬一以後忘記了方便檢視。 話不多說,直接

MySQL連線查詢(inner join,left joinright join的區別)

關係資料庫由多個相關表組成,這些表使用已知為外來鍵列的常用列連結在一起。 因此,從業務角度來看,每個表中的資料是不完整的。 例如,在示例資料庫(yiibaidb)中,使用orderNumber列連結的orders和orderdetails表。 orders和orderdetails表的 ER 圖如下所示

sql中left join right join的區別基礎舉例,僅供辨識

left join(左聯接)       ---返回左表中的所有記錄和右表中條件欄位相等的記錄。 right join(右聯接)     ---返回右表中的所有記錄和左表中聯結欄位相等的記錄 舉例說

[轉]Oracle left join \ right join

select 1 from a,b where a.id=b.id(+) 等同於 a left join b on a.id=b.id select 1 from a,b where a.id(+)=b.id 等同於 a right join b on a.id=b.id 在 MS SQL 中,寫作

[轉]Oracle left join right join

join bsp left select ora ms sql cnblogs from .com select 1 from a,b where a.id=b.id(+) 等同於 a left join b on a.id=b.id select 1 from a,b w

oracle hash joinnested loop下的驅動表相關測試

Oracle 驅動表 Oracle驅動表也叫做外部表,也叫外層表,是在多表關聯查詢中首先遍歷的表,驅動表的每一行都要到另一個表中尋找相應的記錄,然後計算返回最終資料。 驅動表的概念只在nested l

資料庫優化SQL優化之SELECT優化 ——JOINLEFT JOIN RIGHT JOIN

         在資料庫的應用中,我們經常需要對多表進行連表操作來獲得關係型的資料,因此,應該更加的掌握好 SQL語句的join原理,因為,可以稍一不慎,可能一個不好的join導致資料庫的全表掃描,查詢出大量的 無用的資訊,並且對資料庫效能影響極大。          資

left join right join的區別

這裡拿學生表和班級表舉例: 學生表: 班級表 SELECT * FROM `student`s LEFT JOIN `class` c on s.id = c.uid

left join left outer join 的區別---其他功能(inner join 等價於直接,==條件)(左右代表依著一邊的資料條數)

使用關係代數合併資料1 關係代數合併資料集合的理論基礎是關係代數,它是由E.F.Codd於1970年提出的。在關係代數的形式化語言中:        用表、或者資料集合表示關係或者實體。        用行表示元組。        用列表示屬性。關係代數包含以下8個關係運算符        選取――返

很簡單的例子讓你記住inner joinleft joinright那點區別

left join(左聯接) 返回包括左表中的所有記錄和右表中聯結欄位相等的記錄  right join(右聯接) 返回包括右表中的所有記錄和左表中聯結欄位相等的記錄 inner join(等值連線) 只返回兩個表中聯結欄位相等的行 舉例如下:  -----------

hive關於left join join時候on條件總結

hive中使用join時候on條件 1、如果 select * from a left join b on(a.欄位=b.欄位) 工作正常 2、如果 select * from a left join b on(a.欄位=b.欄位,b.欄位=某值,b.…

mysql left joinunion結合的用法

left join和union結合的用法 子查詢union 然後加個括號設定個別名 (union自動去除 重複的 ) select o.nickName,o.sex,o.province,o.city,from_unixtime(m.time,'%Y-%m-%d %H

Oracle inner joinwhere區別

1 .WHERE子句中使用的連線語句,在資料庫語言中,被稱為隱性連線。INNER JOIN……ON子句產生的連線稱為顯性連線。(其他JOIN引數也是顯性連線)WHERE 和INNER JOIN產生的連線關係,沒有本質區別,結果也一樣。但是!隱性連線隨著資料庫語言的規範和發展,已經逐漸被淘汰,比較新的資料庫語言

left join left outer join 的區別 ,full outer join

 通俗的講:    A   leftjoin   B   的連線的記錄數與A表的記錄數同    A   rightjoin   B   的連線的記錄數與B表的記錄數同      A   leftjoin   B   等價B   rightjoin   A          

一段程式碼說明LEFT JOIN INNER JOIN

  SELECT a~aufnr a~erdat a~werks a~objnr b~rsnum b~plnbez b~aufpl c~maktx          d~j_3asize AS j_3akordx e~psmng     INTO CORRESPONDING

Oracle -- left join查詢結果不是左表的全部資料的解決方法

left join在實際應用中並不是查出資料都是左邊的全部資料,為什麼呢?看看自己的解決方法吧 SELECT T.xx, T1.xx, ... FROM xxx T LEFT JOIN xxx T1 ON T.ID