加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Mysql实例数据库中的SELECT语句逻辑执行顺序分析

发布时间:2020-12-12 00:55:57 所属栏目:MySql教程 来源:网络整理
导读:《Mysql实例数据库中的SELECT语句逻辑执行顺序分析》要点: 本文介绍了Mysql实例数据库中的SELECT语句逻辑执行顺序分析,希望对您有用。如果有疑问,可以联系我们。 引言 MYSQL入门 这不是一个什么多深的技术问题,多么牛叉的编程能力.这跟一个人的开发能力也

《Mysql实例数据库中的SELECT语句逻辑执行顺序分析》要点:
本文介绍了Mysql实例数据库中的SELECT语句逻辑执行顺序分析,希望对您有用。如果有疑问,可以联系我们。

引言MYSQL入门

  这不是一个什么多深的技术问题,多么牛叉的编程能力.这跟一个人的开发能力也没有非常必然的直接关系,但是知道这些会对你的SQL编写,排忧及优化上会有很大的帮助.它不是一个复杂的知识点,但是一个非常基础的SQL根基.不了解这些,你一直用普通水泥盖房子;掌握这些,你是在用高等水泥盖房子.MYSQL入门

  然而,就是这么一个小小的知识点,大家可以去调查一下周围的同事朋友,没准你会得到一个“惊喜”.MYSQL入门

  由于这篇文章是突然有感而写,下面随手编写的SQL语句没有经过测试.MYSQL入门

  看下面的几段SQL语句:
MYSQL入门

代码如下: #1
SELECT ID,COUNT(ID) AS TOTAL
?
FROM STUDENT
?
GROUP BY ID
?
HAVING TOTAL>2
#2
SELECT ID,COUNT(ID) AS TOTAL
?
FROM STUDENT
?
GROUP BY ID
?
ORDER BY TOTAL
#3
SELECT FIRSTNAME+' '+LASTNAME AS NAME,COUNT(*) AS COUNT
?
FROM STUDENT
?
GROUP BY NAME

你觉得哪一个不能够成功执行?

下面是SELECT语句的逻辑执行顺序:MYSQL入门

1.FROM
2.ON
3.JOIN
4.WHERE
5.GROUP BY
6.WITH CUBE or WITH ROLLUP
7.HAVING
8.SELECT
9.DISTINCT
10.ORDER BY
11.TOP
  MICROSOFT指出,SELECT语句的实际物理执行顺序可能会由于查询处理器的不同而与这个顺序有所出入.MYSQL入门

几个示例MYSQL入门

示例一:
MYSQL入门

代码如下:
SELECT ID,COUNT(ID) AS TOTAL
?
FROM STUDENT
?
GROUP BY ID
?
HAVING TOTAL>2

觉得这个SQL语句眼熟吗?对,非常基础的分组查询.但它不能执行成功,因为HAVING的执行顺序在SELECT之上.MYSQL入门

实际执行顺序如下:MYSQL入门

1.FROM STUDENT
2.GROUP BY ID
3.HAVING TOTAL>2
4.SELECT ID,COUNT(ID) AS TOTAL
  很明显,TOTAL是在最后一句SELECT ID,COUNT(ID) AS TOTAL执行过后生成的新别名.因此,在HAVING TOTAL>2执行时是不能识别TOTAL的.MYSQL入门

示例二
MYSQL入门

代码如下:
SELECT ID,COUNT(ID) AS TOTAL
?
FROM STUDENT
?
GROUP BY ID
?
ORDER BY TOTAL

这个的实际执行顺序是:MYSQL入门

1.FROM STUDENT
2.GROUP BY ID
3.SELECT ID,COUNT(ID) AS TOTAL
4.ORDER BY TOTAL
  这一次没有任何问题,能够成功执行.如果把ORDER BY TOTAL换成ORDER BY COUNT(ID)呢?
MYSQL入门

代码如下:
SELECT ID,COUNT(ID) AS TOTAL
?
FROM STUDENT
?
GROUP BY ID
?
ORDER BY COUNT(ID)

实际执行顺序:

1.FROM STUDENT
2.GROUP BY ID
3.SELECT ID,COUNT(ID) AS TOTAL
4.ORDER BY COUNT(ID)MYSQL入门

  没错,它是能够成功执行的,看SQL执行计划,它与上面ORDER BY TOTAL是一样的.ORDER BY 是在SELECT后执行,因此可以用别名TOTAL.MYSQL入门

示例三
MYSQL入门

代码如下:
SELECT FIRSTNAME+' '+LASTNAME AS NAME,COUNT(*) AS COUNT
?
FROM STUDENT
?
GROUP BY NAME

 实际执行顺序:MYSQL入门

代码如下:
FROM STUDENT
?
GROUP BY NAME
?
SELECT FIRSTNAME+' '+LASTNAME AS NAME,COUNT(*) AS COUNT

很明显,执行GROUP BY NAME时别名NAME还没有创建,因此它是不能执行成功的.MYSQL入门

总结MYSQL入门

  回忆起曾经随意问过一些人这个问题,不管谁说不知道时我们都会故意嘲笑一翻,当然此嘲笑非彼嘲笑.但事实证明还是有一些人不会注意到这个知识点,在此贴出来只是做为一个友好的提醒.MYSQL入门

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读