zoukankan      html  css  js  c++  java
  • SQL执行顺序

    SQL 是一种为数不多的声明性语言,我们告诉系统我们需要什么。


    SQL语句的语法顺序:

    ```
    SELECT [DISTINCT]
    FROM
    JOIN
    ON
    WHERE
    GROUP BY
    HAVING
    ORDER BY
    LIMIT
    ```

    对于MySQL,除了第一行,其他部分都是可选的,有的DBMS要求FROM从句也是必须的。


    执行顺序:

    ```
    (1) FROM <left_table>
    (2) ON <join_condition>
    (3) <join_type> JOIN <right_table>
    (4) WHERE <where_condition>
    (5) GROUP BY <group_by_list>
    (6) HAVING <having_condition>
    (7) SELECT
    (8) DISTINCT <select_list>
    (9) ORDER BY <order_by_condition>
    (10) LIMIT <limit_number>
    ```


    SQL语句的执行过程中,每一步都会产生一个虚拟表用来保存SQL语句的执行结果 为下一步提供数据。


    > from

    sql首先执行from将数据从硬盘加载到数据缓冲区中,以便对这些数据进行操作。如果有多个表则求所有表的笛卡尔积。
    (table1的记录条数 * table2的记录条数 * tableN的记录条数)这时第一个虚拟表产生VT1


    > on

    其次执行on,从VT1中取出匹配on条件的行, 产生VT2。


    > join

    left join,right join 外部连接就是在这个时候执行的,在VT2的基础上添加符合条件的外部的行,产生VT3。


    > where

    执行where过滤,产生VT4
    *由于这个时候select没有执行,所以select中的别名不可以用于where
    SELECT T1.c1 + T1.c2 AS v FROM T1 WHERE v = 1
    -- v 在此处不可用,因为先执行where语句
    SELECT T1.c1 + T1.c2 AS v FROM T1 WHERE (T1.c1 + T1.c2 ) = 1


    > group by

    在VT4的基础上执行group by 分组数据,产生VT5。


    > having

    在VT5的基础上执行having过滤,产生VT6。


    > select

    查出我们要的字段,产生VT7。


    > order by

    排序 产生VT8


    > limit

    限制返回行数


    SQL 语言的核心是对表的引用(table references)

  • 相关阅读:
    HDU 5045 5047 5050 5053(上海网络赛E,F,I,L)
    Xcode 5、Xcode 6 免证书真机调试
    Ubuntu打开终端的方法三种
    JAVA异常处理机制
    Java多线程之~~~~synchronized 方法
    iphone开发技术要学习的内容
    表达式求值(数据结构书上栈的应用之中的一个)
    Java学习篇之---json-lib(Maven)
    Nginx 笔记与总结(16)nginx 负载均衡
    SPSS数据记录的选择(Select Cases)
  • 原文地址:https://www.cnblogs.com/anyeshe/p/5750504.html
Copyright © 2011-2022 走看看