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 比(+)的效率高;
當然,執行第二次之後,由於資料已經到了快取,區別也不明顯了,基本是一致的。
相關推薦
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.i
oracle的left join和inner 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中in和exist語句的區別?(補充了left join和right join)
有用 表數 from 部分匹配 exist 循環 targe 從表 exists in和exists(摘錄自百度)in 是把外表和內表作hash 連接,而exists是對外表作loop循環,每次loop循環再對內表進行查詢。如果兩個表中一個較小,一個是大表,則子查詢表大的用
left join on後面 加條件和where後面加條件的區別 inner join 與 left join 和right join之間的區別
上一篇對三個join的語句做了一個區別,如果連最基礎的都不清楚,那麼請先參考:inner join 與 left join 和right join之間的區別 碰巧在專案中遇到了一個sql,是left join和where的條件限制的區別,想了好半天,這裡做一下筆記,萬一以後忘記了方便檢視。 話不多說,直接
MySQL連線查詢(inner join,left join和right 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 join和nested loop下的驅動表相關測試
Oracle 驅動表 Oracle驅動表也叫做外部表,也叫外層表,是在多表關聯查詢中首先遍歷的表,驅動表的每一行都要到另一個表中尋找相應的記錄,然後計算返回最終資料。 驅動表的概念只在nested l
資料庫優化SQL優化之SELECT優化 ——JOIN和LEFT 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 join、left join和right那點區別
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 join和union結合的用法
left join和union結合的用法 子查詢union 然後加個括號設定個別名 (union自動去除 重複的 ) select o.nickName,o.sex,o.province,o.city,from_unixtime(m.time,'%Y-%m-%d %H
Oracle inner join和where區別
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