zoukankan      html  css  js  c++  java
  • 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表不能太多(先过滤条件然后再根据表连接 同时在表中建立相关查询字段的索引这样在大数据多表联合查询的情况下速度相当快)
  • 相关阅读:
    R语言实战
    Python Google Translate API
    Windows使用技巧
    test_CSDN_markdown_format
    Linux: bash script
    test_markdown
    线性基学习笔记+模板总结
    Educational Codeforces Round 69 D Yet Another Subarray Problem
    图片托管
    二维线段树模板,建树,维护最大最小值
  • 原文地址:https://www.cnblogs.com/a-s-m/p/10767574.html
Copyright © 2011-2022 走看看