2017-07-18 24 views

回答

0

Equijoin是一個連接,您可以檢查一個值是否與另一個值相等。 內連接是一個等距連接,使用帶有「=」符號的where子句的連接是一個等間連接。所以你的問題是:使用where子句或內部連接語句更快嗎?那麼這個問題是在這裏找到答案:

Inner join vs Where

棄渣:它們使用相同的計劃,使他們沒有差別。 哦,在第二種情況下,你可以這樣做:

select e.*,d.* 
from emp e 
inner join dept d on e.deptno=d.deptno and d.dname='ACCOUNTING'; 

希望它可以幫助

+0

我個人認爲將過濾器條件(例如d.dname ='ACCOUNTING')放入JOIN部分是一種糟糕的做法。它可能不會影響結果(如果由於某種原因改變爲和外連接,它會影響它),但它會使查詢更難以閱讀,特別是如果在各種表上存在過濾器,因爲過濾條件遍佈所有不同的ON子句。 – fhossfel

+0

我同意,我認爲最好理解這兩個版本實際上是相同的,但我甚至在內部連接上也使用where語句。我只在on子句後面加入了比較兩個表的條​​件。 – WaLinke

+0

非常感謝您的回答 –

0

「相等連接」是一個連接使用平等的比較操作。有些將術語equi連接限制爲內連接(例如http://www.orafaq.com/wiki/Equi_join),其他人將使用內連接和外連接的術語(例如https://stackoverflow.com/a/5471290/121544)。

您的示例查詢都是equi連接,都是內部連接。語法不同,第一種語法直到SQL-92標準纔可用。優化器應該在這兩種情況下提出相同的計劃。明確的內部連接有助於避免意外的交叉連接。

非等距內連接:

select x 
from X 
inner join Y 
    on Y.BeginDate <= X.SomeDate 
    and X.SomeDate < Y.EndDate 
+1

Equi連接是內連接的子集嗎?我認爲連接條件是平等的外連接(如'a.id(+)= b。id',使用Oracle語法)仍然是一個equi連接,不是嗎? – mathguy

+0

搜索,equi加入不規範。一些限制只是內部連接。將更新。 –

+0

非常感謝你的回答 –

0

目前您的例子是內部連接。 (內部的「相反」是外部的;您的查詢都是內部連接,它們都不是外部連接。)「Equi」連接表示連接條件是來自連接表中的列的值相等的連接。你的例子都是equi連接。

您的示例之間的區別僅在於語法 - 第一個使用舊的專有Oracle語法(不推薦),第二個使用標準現代ANSI(SQL標準)語法(推薦)。

另外:你的兩個查詢是等價的。優化器會將它們轉換爲相同的可執行操作 - 因此沒有性能差異。

+0

嗨,你能告訴我爲什麼現代的建議?使用舊版本有什麼問題/缺點嗎? – pOrinG

+0

非常感謝你給出答案 –

相關問題