SELECT语句中子句的顺序。SELECT语句中使用时必须遵循的次序。

经过一段时间的学习,我们知道了SELECT语句超简版的语法如下:

SELECT 字段名 FROM 表名

后来,我们又陆续学习了WHERE/GROUP BY/HAVING/ORDER BY等子句……

因此,我们今天就来说下SELECT语句较为完整的语法结构(如下)与它的执行顺序是怎么样的?

SELECT [DISTINCT] [TOP] 字段名
FROM 表名
[WHERE] 行级过滤
[GROUP BY] 分组
[HAVING] 组级过滤
[ORDER BY] 排序

文字版较完整的SELECT语句执行顺序如下:

1)SQL首先执行的是FROM子句,根据FROM子句中指定的一个或多个表创建表。

2)如果存在WHERE子句,则对步骤1获得的表进行条件过滤,删除不符合条件的行记录。

3)如果存在GROUP BY子句,则对步骤2生成的表按指定字段进行分组,生成一份新的数据表。

4)如果存在HAVING子句,则对步骤3的表按指定条件进行过滤,删除不满足过滤条件的记录。

5)执行SELECT子句,删除不包含在SELECT子句所指定的字段。如果SELECT子句中包含关键字DISTINCT,则执行去重运算。

6)如果有ORDER BY子句,则按指定的排序规则对结果表进行排序操作。

7)如果有TOP谓词,则再进行TOP运算。


表格版较完整的SELECT语句执行顺序如下:

顺序

子句

说明

是否必须使用

1

FROM

从中检索数据的表

仅在从表中选择数据时使用

2

WHERE

行级过滤

3

GROUP BY

分组说明

仅在按组计算聚集时使用

4

HAVING

组级过滤

5

SELECT

要返回的列或表达式

6

DISTINCT

返回唯一不同的值

7

ORDER BY

输出排序顺序

8

TOP

规定要返回的记录的数目

总结:SQL的执行顺序,既不是语句的先后顺序,也不是由内到外的顺序;比如,最先出现的SELECT 子句并非首先执行的,它的执行顺序处在HAVING之后和ORDER BY之前。DISTINCT的位置处在TOP之前,但TOP的运算顺序又在DISTINCT之后。

点击关注“SQL数据库运维”,后台回复关键字:进群,带你进入高手如云的技术交流群。

  

  

SQL 查询总是先执行SELECT语句吗?你们都错了!的更多相关文章

  1. SQL Server 日常维护--查询当前正在执行的语句、死锁、堵塞

    查询当前正在执行的语句: SELECT der.[session_id],der.[blocking_session_id], sp.lastwaittype,sp.hostname,sp.progr ...

  2. sql server中同时执行select和update语句死锁问题

    原始出处 http://oecpby.blog.51cto.com/2203338/457054 最近在项目中使用SqlServer的时候发现在高并发情况下,频繁更新和频繁查询引发死锁.通常我们知道如 ...

  3. SQL基础教程(第2版)第2章 查询基础:2-1 SELECT语句基础

    ● 通过指定DISTINCT可以删除重复的行.● 为列设定显示用的别名. ■列的查询 通过 SELECT 语句查询并选取出必要数据的过程称为查询(query). 该 SELECT 语句包含了 SELE ...

  4. Mybatis如何执行Select语句,你真的知道吗?

    持续原创输出,点击上方蓝字关注我吧 作者:不才陈某 博客:https://chenjiabing666.github.io 前言 本篇文章是Myabtis源码分析的第三篇,前两篇分别介绍了Mybati ...

  5. SQL 查询并不是从 SELECT 开始的

    原文地址:SQL queries don't start with SELECT 原文作者:Julia Evans(已授权) 译者 & 校正:HelloGitHub-小熊熊 & 卤蛋 ...

  6. SQL学习(三)Select语句:返回前多少行数据

    在实际工作中,我们可能根据某种排序后,只需要显示前多少条数据,此时就需要根据不同的数据库,使用不同的关键字 一.SQL Server/Access select top 数量/百分比 from tab ...

  7. 原来select语句在MySQL中是这样执行的!看完又涨见识了!这回我要碾压面试官!

    大家好,我是冰河~~ MySQL作为互联网行业使用最多的关系型数据库之一,与其免费.开源的特性是密不可分的.然而,很多小伙伴工作了很多年,只知道使用MySQL进行CRUD操作,这也导致很多小伙伴工作多 ...

  8. MySQL数据库详解(一)执行SQL查询语句时,其底层到底经历了什么?

    一条SQL查询语句是如何执行的? 前言 ​ 大家好,我是WZY,今天我们学习下MySQL的基础框架,看一件事千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题.同样,对于MyS ...

  9. mysql实战45讲读书笔记(一) 一条SQL查询语句是如何执行的

    我们经常说,看一个事儿千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题.同样,对于MySQL的学习也是这样.平时我们使用数据库,看到的通常都是一个整体.比如,你有个最简单的表 ...

随机推荐

  1. Feign Client 原理和使用

    Feign Client 原理和使用 一块石头 ​ 公众号:好奇心森林 ​关注他 创作声明:内容包含虚构创作 6 人赞同了该文章 最近一个新项目在做后端HTTP库技术选型的时候对比了Spring We ...

  2. VisualEffectGraph概述

    Visual Effect Graph 由来: Visual Effect Graph 是2018.3 以后版本,出的新的粒子特效技术.它是用显卡渲染特效,区别于传统的Patical system 的 ...

  3. GetModuleFileName函数的用法

    函数的功能 获取exe可执行文件的绝对路径. 用法 通过获取到exe的路径,可以获取到程序路径下(父路径或者子路径)的一些其它文件路径. 函数原型 DWORD WINAPI GetModuleFile ...

  4. Qt之先用了再说系列-信号与槽

    QT之信号与槽 简介:信号与槽可是Qt最大成功点,也是整个Qt基本核心机制,如果不会信号与槽,将无法领略Qt之美: 1.信号与槽函数原型: QObject::connect(const QObject ...

  5. hadoop操作hdfs错误

    本文转自:http://www.aboutyun.com/blog-61-22.html 当我们对hdfs操作的时候,我们可能会碰到如下错误 错误1:权限问题 Exception in thread ...

  6. sshpass用法介绍

    参考文章:http://www.mamicode.com/info-detail-1105345.html https://www.jianshu.com/p/a2aaa02f57dd p.p1 { ...

  7. bugku crypto wp上半部分汇总

    1.滴答~滴 摩斯码,在线解开. 2. 栅栏密码,在线解就出flag了. 3. Ook解密,由.?!Ook组成密文,在线网站解密 4.这不是摩斯密码 有点像jsfuck,发现又不是,因为不会出现大于号 ...

  8. ios多线程开发基础

    多线程编程:下载数据时,开辟子线程,减少阻塞时间,和主线程并发运行,提升用户体验 1.Thread 1>新建Thread对象,带一selector方法,调用start方法,开启子线程 2> ...

  9. LVM磁盘管理实战案例

    前言:这是关于centos/linux上的LVM磁盘上的扩容,缩减,磁盘类型等收集做的案例 至于ubuntu系统的磁盘扩容参考:https://www.jianshu.com/p/5dcfcec687 ...

  10. spring中如何向一个单例bean中注入非单例bean

    看到这个题目相信很多小伙伴都是懵懵的,平时我们的做法大都是下面的操作 @Component public class People{ @Autowired private Man man; } 这里如 ...