数码资讯
数据库中SELECT语句的逻辑执行顺序分析
介绍 这不是什么很深的技术问题,编程技巧有多好。这与一个人的能力的发展并没有直接的关系是很有必要的,但是你会知道这些SQL编写的,会有解决问题和优化有很大的帮助。这不是一个复杂的知识点,而是一个非常基本的SQL的基础。没有这个,你已经与普通水泥盖房子;你用高高的水泥房子。 但是,这是一个很小的知识点
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
介绍
这不是什么很深的技术问题,编程技巧有多好。这与一个人的能力的发展并没有直接的关系是很有必要的,但是你会知道这些SQL编写的,会有解决问题和优化有很大的帮助。这不是一个复杂的知识点,而是一个非常基本的SQL的基础。没有这个,你已经与普通水泥盖房子;你用高高的水泥房子。
但是,这是一个很小的知识点,你可以去调查身边的同事和朋友,你会得到一个惊喜。
由于这篇文章是在一种突然意义上写的,所以以下SQL语句没有被测试。
查看SQL语句的以下部分:
复制代码代码如下:# 1
选择ID,计数(id)作为总
从学生
组ID
总> 2
# 2
选择ID,计数(id)作为总
从学生
组ID
以总
# 3
选择+名+姓名,计数(*)作为计数
从学生
组的名称
你认为哪一个不能成功
以下是SELECT语句的逻辑执行顺序:
1.from
2.on
3.join
4.where
5.group的
6.with CUBE或ROLLUP
7.having
8.select
9.distinct
10.order的
11.top
微软指出SELECT语句的实际物理执行顺序可能与查询处理器的顺序不同。
几个例子
例1:
复制代码代码如下所示:
选择ID,计数(id)作为总
从学生
组ID
总> 2
想一想熟悉的SQL语句是的,非常基本的组查询,但不能成功执行,因为执行的序列高于选择。
实际执行顺序如下所示:
1.from学生
2.group ID
3.having总> 2
4.select ID(ID)总计数
显然,总的是在选择id的最后一句之后生成的新别名,总数为id(id)。因此,在执行总> 2时无法确定总数。
例二
复制代码代码如下所示:
选择ID,计数(id)作为总
从学生
组ID
以总
实际执行顺序如下:
1.from学生
2.group ID
3.SELECT ID, COUNT (ID) AS TOTAL
4.order总
这一次没有问题,可以成功地执行。如果按订单总数改为按计数(ID)怎么办
复制代码代码如下所示:
选择ID,计数(id)作为总
从学生
组ID
按计数顺序(id)
实际执行命令:
1.from学生
2.group ID
3.select ID(ID)总计数
4.order计数(ID)
是的,它可以成功地执行,在SQL执行计划,这是由总above.order由订单执行后选择相同的,所以你可以使用别名总。
例三
复制代码代码如下所示:
选择+名+姓名,计数(*)作为计数
从学生
组的名称
实际执行命令:
复制代码代码如下所示:
从学生
组的名称
选择+名+姓名,计数(*)作为计数
很明显,在执行组名时,还没有创建别名,因此无法成功执行该别名。
总结
记得随口问了一些人这个问题,不管是谁都不知道我们什么时候会故意笑,当然也不会笑出声来。但结果是有一些人没有注意到这一点的知识。它只是一个友好的提醒,它在这里。
这不是什么很深的技术问题,编程技巧有多好。这与一个人的能力的发展并没有直接的关系是很有必要的,但是你会知道这些SQL编写的,会有解决问题和优化有很大的帮助。这不是一个复杂的知识点,而是一个非常基本的SQL的基础。没有这个,你已经与普通水泥盖房子;你用高高的水泥房子。
但是,这是一个很小的知识点,你可以去调查身边的同事和朋友,你会得到一个惊喜。
由于这篇文章是在一种突然意义上写的,所以以下SQL语句没有被测试。
查看SQL语句的以下部分:
复制代码代码如下:# 1
选择ID,计数(id)作为总
从学生
组ID
总> 2
# 2
选择ID,计数(id)作为总
从学生
组ID
以总
# 3
选择+名+姓名,计数(*)作为计数
从学生
组的名称
你认为哪一个不能成功
以下是SELECT语句的逻辑执行顺序:
1.from
2.on
3.join
4.where
5.group的
6.with CUBE或ROLLUP
7.having
8.select
9.distinct
10.order的
11.top
微软指出SELECT语句的实际物理执行顺序可能与查询处理器的顺序不同。
几个例子
例1:
复制代码代码如下所示:
选择ID,计数(id)作为总
从学生
组ID
总> 2
想一想熟悉的SQL语句是的,非常基本的组查询,但不能成功执行,因为执行的序列高于选择。
实际执行顺序如下所示:
1.from学生
2.group ID
3.having总> 2
4.select ID(ID)总计数
显然,总的是在选择id的最后一句之后生成的新别名,总数为id(id)。因此,在执行总> 2时无法确定总数。
例二
复制代码代码如下所示:
选择ID,计数(id)作为总
从学生
组ID
以总
实际执行顺序如下:
1.from学生
2.group ID
3.SELECT ID, COUNT (ID) AS TOTAL
4.order总
这一次没有问题,可以成功地执行。如果按订单总数改为按计数(ID)怎么办
复制代码代码如下所示:
选择ID,计数(id)作为总
从学生
组ID
按计数顺序(id)
实际执行命令:
1.from学生
2.group ID
3.select ID(ID)总计数
4.order计数(ID)
是的,它可以成功地执行,在SQL执行计划,这是由总above.order由订单执行后选择相同的,所以你可以使用别名总。
例三
复制代码代码如下所示:
选择+名+姓名,计数(*)作为计数
从学生
组的名称
实际执行命令:
复制代码代码如下所示:
从学生
组的名称
选择+名+姓名,计数(*)作为计数
很明显,在执行组名时,还没有创建别名,因此无法成功执行该别名。
总结
记得随口问了一些人这个问题,不管是谁都不知道我们什么时候会故意笑,当然也不会笑出声来。但结果是有一些人没有注意到这一点的知识。它只是一个友好的提醒,它在这里。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。