sql语句执行顺序

一般sql的写法顺序

 

    SELECT [列名称 *代表所有的列]

    FROM [表名称]

    join_type JOIN [表名称]

    ON [join条件]

    WHERE [过滤条件]

    GROUP BY [分组字段]

    HAVING [分组条件]

    ORDER BY [排序字段]

 

那么sql在执行时,顺序是怎样的呢?

 

标准的sql解析顺序为:

 

    FROM    组装数据,来自不同数据源(表)

    WHERE    根据条件过滤记录

    GROUP BY 对数据分组

    计算聚集函数,如avg,sum

    使用HAVING子句筛选分组

    计算所有表达式

    使用ORDER BY对结果排序

 

那么sql的执行顺序呢?

 

    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 并返回调用者

 

要写好sql不容易。但是了解了sql的执行顺序,能在开发的同理,更好的帮助写出好的程序。

比如join表不能太多(先过滤条件然后再根据表连接 同时在表中建立相关查询字段的索引这样在大数据多表联合查询的情况下速度相当快),这种sql优化问题,下次再学习整理下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值