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

    要想学好 SQL ,理解 SQL 语句的执行顺序是非常重要的,只有理解了 SQL 语句的执行顺序,才不会在我们写 SQL 语句发现错误时变得手足无措。

    在大多数编程语言中,代码行是按照它们的编写顺序来执行处理的。而在 SQL 语句中,情况则有些不同。即使 SELECT 子句在查询中最先出现,在逻辑上差不多是最后才处理它。

    各子句在逻辑上按以下顺序进行处理:

    1. FROM

    2. WHERE

    3. GROUP BY

    4. HAVING

    5. SELECT

    6. ORDER BY

    例如:

    select empid,YEAR(orderdate) as orderyear,COUNT(*) as numorders
    from Sales.Orders
    where custid=71
    group by empid,YEAR(orderdate)
    having COUNT(*)>1
    order by empid,orderyear;

    即使这个简单的查询在语法上以 SELECT 子句作为开始,而在逻辑上则应该以如下顺序来处理它的各个子句:

    FROM Sales.Orders

    WHERE custid=71

    GROUP BY empid,YEAR(orderdate)

    HAVING COUNT(*)>1

    SELECT empid,YEAR(orderdate) AS orderyear,COUNT(*) AS numorders

    ORDER BY empid,orderyear

    该语句的功能是:

    1. 从 Sales.Orders 表中查询数据行。

    2. 对订单数据进行过滤,只保留客户 ID 等于 71 的记录。

    3. 按雇员 ID 和订单年份对订单数据进行分组。

    4. 对分组数据(雇员 ID 和订单年份)进行过滤,只保留具有多个订单的分组。

    5. 选择(返回)每个分组的雇员 ID 、订单年份,以及订单数量。

    6. 按照雇员 ID 和订单年份对输出结果进行排序。

    注意:推荐使用分号来结束 SQL 语句。 SQL Server 并不强制要求所有语句都要用分号结束,只有当代码的含义可能产生歧义的特殊情况下,才需要使用分号。推荐使用分号作为所有语句的结束,这是一种标准,可以提高代码的可读性,以后很可能SQL Server 在更多的情况下都将要求使用分号。目前,虽然不要求必须使用分号,不过,加上分号也不会有什么影响。

  • 相关阅读:
    解决Django在mariadb创建的表插入中文乱码的问题
    运行在CentOS7.5上的Django项目时间不正确问题
    获取百度网盘真实下载连接
    Django2.x版本在生成数据库表初始化文件报错
    Pycharm中的Django项目连接mysql数据库
    Django2.x版本路由系统的正则写法以及视图函数的返回问题
    CentOS7.5安装坚果云
    CentOS7.5安装下载工具
    CentOS6.5修改/etc/pam.d/sshd后root无法ssh登陆
    oracle 时间
  • 原文地址:https://www.cnblogs.com/zhangdx/p/2840067.html
Copyright © 2011-2022 走看看