SQL 查询总是先执行SELECT语句吗?你们都错了!
JAVA葵花宝典
共 2266字,需浏览 5分钟
·
2020-07-28 15:58
阅读本文大概需要 3 分钟。
SQL 查询的执行顺序
这张图回答了以下这些问题
可以在 GRROUP BY 之后使用 WHERE 吗?(不行,WHERE 是在 GROUP BY 之前!) 可以对窗口函数返回的结果进行过滤吗?(不行,窗口函数是 SELECT 语句里,而 SELECT 是在 WHERE 和 GROUP BY 之后) 可以基于 GROUP BY 里的东西进行 ORDER BY 吗?(可以,ORDER BY 基本上是在最后执行的,所以可以基于任何东西进行 ORDER BY) LIMIT 是在什么时候执行?(在最后!)
如果你想要知道一个查询语句是否合法,或者想要知道一个查询语句会返回什么,可以参考这张图; 在涉及查询性能或者与索引有关的东西时,这张图就不适用了。
混合因素:列别名
SELECT CONCAT(first_name, ' ', last_name) AS full_name, count(*)
FROM table
GROUP BY full_name
SELECT CONCAT(first_name, ' ', last_name) AS full_name, count(*)
FROM table
GROUP BY CONCAT(first_name, ' ', last_name)
数据库可能不按照这个顺序执行查询(优化)
SELECT * FROM
owners LEFT JOIN cats ON owners.id = cats.owner
WHERE cats.name = 'mr darcy'
LINQ 的查询以 FROM 开头
var teenAgerStudent = from s in studentList
where s.Age > 12 && s.Age < 20
select s;
df = thing1.join(thing2) # JOIN
df = df[df.created_at > 1000] # WHERE
df = df.groupby('something', num_yes = ('yes', 'sum')) # GROUP BY
df = df[df.num_yes > 2] # HAVING, 对 GROUP BY 结果进行过滤
df = df[['num_yes', 'something1', 'something']] # SELECT, 选择要显示的列
df.sort_values('sometthing', ascending=True)[:30] # ORDER BY 和 LIMIT
df[:30]
推荐阅读:
听说你的JWT库用起来特别扭,推荐这款贼好用的! 如何实时主动监控你的网站接口是否挂掉并及时报警 InnoDB索引允许NULL对性能有影响吗
评论