sql语句顺序

sql语句顺序

理解sql内在的执行顺序有利于我们写的高质量的sql语句

书写顺序

SQL 语句的书写顺序如下:

  1. SELECT [列名称]
  2. FROM [表名称]
  3. join_type(内,左右外连接) JOIN [表名称]
  4. ON [join条件]
  5. WHERE [过滤条件]
  6. GROUP BY [分组字段]
  7. HAVING [分组条件]
  8. ORDER BY [排序字段]

解析顺序

  1. FROM 组装数据,来自不同数据源(表)
  2. WHERE 根据条件过滤记录
  3. GROUP BY 对数据分组
  4. 计算聚集函数,如avg,sum
  5. 使用HAVING子句筛选分组
  6. 使用ORDER BY对结果排序
  7. SELECT 选择

执行顺序

FROM: 对前2个表执行笛卡尔积,生成虚表vt1

ON: 对vt1应用on条件,只有满足join_condition条件的才能插入虚表vt2

OUTER(join):如果指定了 OUTER JOIN保留表(preserved table)中未找到的行将行作为外部行添加到vt2,生成t3,如果from包含两个以上表,则对上一个联结生成的结果表和下一个表重复执行步骤和步骤直接结束

WHERE: 对vt3进行where筛选,只有满足where条件的才能插入vt4

GROUP BY: 对vt4按group by字段分组,得到vt5

HAVING:对vt5应用HAVING筛选器只有使 having_condition 为true的组才插入vt6

SELECT:处理select列表产生vt7

DISTINCT:将重复的行从vt7中去除产生vt8

ORDER BY:将vt8的行按order by子句中的列 列表排序生成一个游标vc9

LIMIT(Mysql): 从vc9的开始处选择指定数量的行生成vt10 并返回调用者

简单来讲:
就是用FROM 来得到要操作的表(将符合条件的连接表加入),然后排除掉不符合WHERE条件的记录,接着对现存集合分组(GROP BY),筛选(HAVING),计算聚集函数,得到一个新集合,根据有没有DISTINCT去重,LIMIT选部分,最后返回结果。

提高sql的效率就是要减少操作的数据量和步骤
join表不能太多,先过滤条件然后再根据表连接,同时在表中建立相关查询字段的索引(减少步骤)

简单示例

title

理解记忆

这张图很不错,来自这里
title

参考链接

https://www.douban.com/note/721210149/
https://www.jianshu.com/p/37e2bd6f5a7a
https://blog.csdn.net/weigeshikebi/article/details/80766494

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值