微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql – 当表左连接时,where子句和on子句有什么区别?

sql1:
select t1.f1,t2.f2 
from t1 
   left join t2 on t1.f1 = t2.f2 and t1.f2=1 and t1.f3=0

sql2:

select t1.f1,t2.f2 
from t1 
  left join t2 on t1.f1 = t2.f2 
where t1.f2=1 and t1.f3=0

区别在于and on子句,是否有相同的返回结果?有什么区别? DBMS是否以相同的方式运行它们?谢谢.

解决方法

where子句适用于整个结果集; on子句仅适用于有问题的联接.

在提供的示例中,与连接内侧上的字段相关的所有附加条件 – 因此在本示例中,两个查询是有效相同的.

但是,如果您在连接外侧的表格中包含条件,则会有显着差异.

您可以从以下链接获得更多信息:http://ask.sqlservercentral.com/questions/80067/sql-data-filter-condition-in-join-vs-where-clause

例如:

select t1.f1,t2.f2 from t1 left join t2 on t1.f1 = t2.f2 and t2.f4=1

select t1.f1,t2.f2 from t1 left join t2 on t1.f1 = t2.f2 where t2.f4=1

– 做不同的事情 – 前者将加入t2记录,其中f4是1,而后者已经被有效地转回到内部连接到t2.

原文地址:https://www.jb51.cc/mssql/81494.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐