• mysql执行顺序


    手写sql顺序

    select <select_list> from <table_name> <join_type> join <join_table> on <join_condition> where <where_condition> group by <group_by_list> having <having_condition> order by <order_by_condition> limit <limt_number>

    mysql执行顺序

    from <left table> on <on_condition> <join_type> join <join_table> where <where_condition> group by <group_by_list> <sum()avg()等聚合函数> having <having_condition> select <select_list> distinct order by <order_by_condition> limit <limit_number>

    1、FROM:    对from的左边的表和右边的表计算笛卡尔积,产生虚拟表VT1

    2、ON:   对虚拟表VT1进行on筛选,只有那些符合join-condition的行才会被记录在虚表VT2

    3、JOIN:   如果指定outer join(比如left join、right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3,rug from子句中包括两个以上的表的话,那么就会对上一个join连接产生的结果VT3和下一个表重复执行执行步骤1-3这3个步骤,一直到处理完所的表为止

    4、WHERE:  对虚拟表VT3进行where条件过滤。只有符合where-condition的记录才会被插入到虚拟表VT4中

    5、GROUP BY:  根据group by子句中的列,对VT4中的记录进行分组操作,产生表VT5

    6、CUBE | ROLLUP:     对表VT5进行cube或者rollup操作,产生表VT6.

    6、HAVING: 对虚拟表VT6应用having过滤,只有符合 having-condition 的记录会被插入到虚拟表VT7中。

    7、SELECT:执行select操作,选择指定的列的,插入到虚拟表VT8中

    8、DISTINCT:对VT8中的记录进行去重。 产生虚拟表VT9

    9、ORDER BY:对虚拟表VT9中的记录按照 order_by_list 进行排序操作,产生虚拟表VT10

    10、LIMIT:取出指定行的记录,产生虚拟表VT11,并将结果返回

     

  • 相关阅读:
    使用Skaffold一键将项目发布到Kubernetes
    线性代数回头看——线性方程组
    Python 函数 初学者笔记
    Python 用户输入&while循环 初学者笔记
    Python If&字典 初学者笔记
    Python 变量&列表 初学者笔记
    SQL 常见优化指南
    垃圾回收机制
    MySQL 前缀索引
    MySQL 常用优化
  • 原文地址:https://www.cnblogs.com/ljf520hj/p/15907322.html
Copyright © 2020-2023  润新知