2013-11-25 60 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'',否则您可能会收到意想不到的结果 –