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 在更多的情况下都将要求使用分号。目前,虽然不要求必须使用分号,不过,加上分号也不会有什么影响。

原文地址:https://www.cnblogs.com/zhangdx/p/2840067.html