2013-11-25 62 views
2

假設我們有兩個表,客戶&交易SQL加盟條件

Customer      Transaction T 
-----------      ---------------- 
Cust_Id       Cust ID 
Cust name      Items 
Cust Address      Date  
Flag 

如果我加入這些表, -

select * from Customer C 
inner join Transaction T 
on C.Cust_id=T.Cust_id 
Where C.Flag= 'Y' 

OR

select * from Customer C 
inner join Transaction T 
on C.Cust_id=T.Cust_id 
AND C.Flag='Y' 

請任何人都可以讓我知道兩個查詢之間的功能差異(請參考兩個查詢的最後一行)

+0

的區別是什麼? – Kuzgun

+0

@Kuzgun我花了一點要注意的差異爲好,但'WHERE'改爲'和'的'JOIN'條款。 –

+0

@ChrisHayes,輸出的區別是什麼? – user3030329

回答

2

在內側殼體連接,沒有任何區別。兩者都以相同的方式工作。查詢優化器最終將它們視爲相同。

下面的鏈接將幫助您更好地理解它

Link Here

+0

感謝哥們的答覆,但我已經經歷了兩個不同之處,但我無法弄清楚,究竟是什麼區別。 – user3030329

+1

@ user3030329「我經歷過的差異」根本沒有幫助。你注意到這兩者有什麼不同? –

+1

如果使用涉及多個表格的左/右外連接,則條件的放置會產生差異。但是對於innerjoin而言,性能或最終結果沒有差別。 – DarkKnight

0

兩個條件都是相同的,但我覺得首先查詢比第二

0

ON子句更快也過濾像一個WHERE子句,有差異沒有JOIN子句的ON過濾器不能存在。

在內的情況下,JOIN子句,他們被視爲相同,但在左的情況下,或右連接,在過濾器上發揮了巨大的作用。

事實上,你不能過濾LEFT的結果(右)這在其他表中不存在的列JOIN和標準的做法是把這些列我上的篩選。

+0

*您可以通過*在左或右連接表的列過濾器。除非您檢查C.FLAG IS NULL或C.FLAG ='Y'',否則您可能會收到意想不到的結果 –