MySQL查询条件中放置on和where的区别分析
16lz
2021-12-24
导语
今天在写 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 >
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>
结果集的不同,不仅与 SQL 的优先级有关,还和 LEFT JOIN 有关
使用left join时on后面的条件只对右表有效
- on是在生成临时表的时候使用的条件,不管on的条件是否起到作用,都会返回左表 (table_name1) 的行。
- where则是在生成临时表之后使用的条件,此时已经不管是否使用了left join了,只要条件不为真的行,全部过滤掉。
更多相关文章
- android上一些方法的区别和用法的注意事项
- Android中的FILL_PARENT与WRAP_CONTENT的区别
- [Android] ACTION_GET_CONTENT与ACTION_PICK的区别
- android上一些方法的区别和用法的注意事项
- linearLayout 和 relativeLayout的属性区别
- 【Android】loadData与loadDataWithBaseURL的区别
- Android中visibility属性VISIBLE、INVISIBLE、GONE的区别
- Android中的getApplication()、getApplicationContext的区别与用
- android 中theme.xml与style.xml的区别