作者:新视觉9927 | 来源:互联网 | 2021-09-17 15:31
这篇文章主要给大家介绍了关于MySQL查询条件中放置on和where的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
导语
今天在写 SQL 的时候,遇到一个问题。需求是这样的,查询数据,按照评分倒序、近一周访问量倒序,这样进行排序。问题是常规的写法,将 day >= xxx 条件放到 where 中, 如果某些数据近一周没有访问量,那么这条数据就查不出来。解决办法呢,就是将条件放到 LEFT JOIN 中。
MySQL 语句执行顺序
首先先说明一个概念,MySQL 语句执行的顺序,并不是按照 SQL 语句的顺序。下面是示例 SQL
SELECT DISTINCT
FROM
JOIN ON
WHERE
GROUP BY
HAVING
ORDER BY
LIMIT
下面是 SQL 的执行顺序
FROM
ON
JOIN
WHERE
GROUP BY
HAVING
SELECT
DISTINCT
ORDER BY
LIMIT
LEFT JOIN 的作用
结果集的不同,不仅与 SQL 的优先级有关,还和 LEFT JOIN 有关
使用left join时on后面的条件只对右表有效
- on是在生成临时表的时候使用的条件,不管on的条件是否起到作用,都会返回左表 (table_name1) 的行。
- where则是在生成临时表之后使用的条件,此时已经不管是否使用了left join了,只要条件不为真的行,全部过滤掉。
以上是从两篇资料中摘抄的,可以很好的概括(原文链接在下方,其中都有示例)。
参考资料:
- 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序
- MySQL left join操作中 on与where放置条件的区别
- SQL中过滤条件放在on和where中的区别。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。