join sql查询中where和and子句的区别

时间:2014-03-10 14:16:41

标签: mysql sql relational-database

以下两个SQL查询有什么区别

select a.id, a.name, a.country 
from table a 
left join table b on a.id = b.id
where a.name is not null

select a.id, a.name, a.country 
from table a 
left join table b on a.id = b.id and a.name is not null

3 个答案:

答案 0 :(得分:1)

除了语法之外没有区别。

答案 1 :(得分:1)

基于以下两个测试结果

select a.id, a.name,a.country from table a left join table b
on a.id = b.id
where a.name is not null 

更快(237 Vs 460)。 据我所知,这是一个标准。

enter image description here

enter image description here

答案 2 :(得分:-2)

  1. 执行连接,然后执行过滤器
  2. 在加入之前执行过滤器(更好的性能)
  3. 编辑:上面是我的原始答案,下面是支持它。

    4个表,4个左连接,大约500,000个结果,第二个查询以一半的时间运行 。在尝试测试查询效率时,您应该选择更大的工作集...或者考虑CPU负载,RAM使用率,连接时间等一些其他因素。如果您将有少于1,000条记录或有限的流量优化将很难看到或证明。在生产环境中测试您的工作集并使用更好的表现(不仅仅是理论上),这很简单。

    http://www.beaudurrant.com/images/sof/22302649.jpg

    您可以在我的数据集中看到效率和结果的差异。此示例使用的是mySQL数据库。

      452,734 420.016 中的记录 在 214.334
    1. 452,747 条记录

      注意:查询的目的是缓慢运行。