美文网首页mysql 知识库
MySQL 查询条件放置 on 和 where 的区别

MySQL 查询条件放置 on 和 where 的区别

作者: haoyq | 来源:发表于2018-06-07 21:45 被阅读31次

导语

今天在写 SQL 的时候,遇到一个问题。需求是这样的,查询数据,按照评分倒序、近一周访问量倒序,这样进行排序。问题是常规的写法,将 day >= xxx 条件放到 where 中, 如果某些数据近一周没有访问量,那么这条数据就查不出来。解决办法呢,就是将条件放到 LEFT JOIN 中。

MySQL 语句执行顺序

首先先说明一个概念,MySQL 语句执行的顺序,并不是按照 SQL 语句的顺序。下面是示例 SQL

SELECT DISTINCT
    < select_list >
FROM
    < left_table > < join_type >
JOIN < right_table > ON < join_condition >
WHERE
    < where_condition >
GROUP BY
    < group_by_list >
HAVING
    < having_condition >
ORDER BY
    < order_by_condition >
LIMIT < limit_number >

下面是 SQL 的执行顺序

FROM <left_table>
ON <join_condition>
<join_type> JOIN <right_table>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
SELECT 
DISTINCT <select_list>
ORDER BY <order_by_condition>
LIMIT <limit_number>

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中的区别

相关文章

  • MySQL 查询条件放置 on 和 where 的区别

    导语 今天在写 SQL 的时候,遇到一个问题。需求是这样的,查询数据,按照评分倒序、近一周访问量倒序,这样进行排序...

  • mysql之条件语句

    mysql之条件语句where和having的区别。当我们需要按条件对查询结果进行筛选,就需要条件语句WHERE和...

  • mysql 查询

    mysql的查询、子查询及连接查询 一、mysql查询的五种子句 where(条件查询)、having(筛选)、g...

  • 面试总结

    1.Java编程 2. Mysql添加索引后查询速度没有变化 mysql查询语句的where条件字段和select...

  • [Mysql]WHERE条件查询

    数据库中如果包含大量的数据,很少需要检索表中所有的行信息,通常只会根据特定的需要提取对应的数据子集。只检索所需要数...

  • mysql的查询、子查询及连接查询

    一、mysql查询的五种子句 where(条件查询)、having(筛选)、group by(分组)、order ...

  • 常用SQL相关

    1. where和having的区别? where和having都可以使用的场景:当筛选条件在要查询的字段中都有的...

  • 查询性能优化

    MySQL查询优化器的局限性 关联子查询 MySQL的子查询实现的非常糟糕,最糟糕的一类查询是where条件中包含...

  • mysql使用where条件数字类型被强转

    mysql在使用where查询的时候,如果查询约束的字段是varchar类型,但是查询条件是int类型,则会把无法...

  • mysql索引失效场景

    WHERE字句的查询条件里有不等于号(WHERE column!=…),MYSQL将无法使用索引类似地,如果WHE...

网友评论

  • Mehere:深入了解下 笛卡尔积和内连接、外连接的关系区别。
  • 被时间推开:就是说我把on条件字段放到where反而会更慢一些,涨姿势了,谢谢
    被时间推开:@haoyq 好的
    haoyq:@被时间推开 放在不同的位置,结果集是不同的。要考虑这点

本文标题:MySQL 查询条件放置 on 和 where 的区别

本文链接:https://www.haomeiwen.com/subject/pemgsftx.html