SQL查询语句执行的逻辑顺序
一、简介
大家都知道SELECT语句是用来查询数据表中的数据的,构成SELECT语句的还有各种元素(where、from、group by等),不同元素又代表了不同的处理逻辑,那么这些元素在执行查询时处理的顺序是怎么样的?
本文就说明每个元素在执行查询时的逻辑顺序和作用。
二、逻辑查询和物理查询
逻辑查询,是一个术语名词,其意思是SQL查询在处理的原理和概念,理解SQL语句背后的查询逻辑是为了让我们把查询知识更好的融会贯通。在分析逻辑查询的原理时,往往表面上会看似效率低下。
但是真正在执行的时候,数据库服务器引擎实行物理查询,数据库服务器引擎不会按部就班的按照逻辑查询的方式和步骤去执行,它会在遵守“逻辑查询”的规范和要求的前提下,实行优化方案。
三、执行顺序
对于大多数编程语言,代码的执行是按照编写时的顺序处理的,在SQL中有所不同。就select来说,虽然它出现在语句的首部,但是它实际上并不是第一个处理的元素。
通过示例代码更好的描述select查询的逻辑。
select empid,YEAR(orderdate) as orderyear,COUNT(*) as numorder
from Sales.Orders
where custid=71
group by empid,YEAR(orderdate)
having COUNT(*) >1
order by empid,orderyear
SQL语句解读:
此查询要查出客户ID为71其下的订单,按照员工ID和订单年份进行分组,并且对分组后的数据进行筛选,筛选订单数量大于1的。
查询显示的字段信息有:员工ID、订单年份和订单数量,并按照员工ID和订单年份进行了排序。
查询语句的执行顺序:
- FROM
- WHERE
- GROUP BY
- HAVING
- SELECT
- ORDER BY
按照执行逻辑我们可以对比下示例中的语法,可以得出一个结论,SQL语句的逻辑执行顺序不是按照我们编写的语法格式顺序去执行的。
将语法按照逻辑执行顺序编写,分析每个元素子句执行的功能:

四、SQL语句的元素不按照编写的顺序执行
SQL设计师想把编写SQL语句的构思,就好像我们说一段话一样,让我们更好的编写查询语句。试想,一个人对另一个人下达一个指令,通常是这样描述:“给我厨房里左上方抽屉中的车钥匙”。
我们按照这样的方式去编写SQL语句就变道很直观。但如果你对机器或者计算机程序去表达指令,你就不得不以操作的角度去表达你的指令,指令会像这样描述:“去厨房,打开左上方的抽屉,拿车钥匙,带给我”。
所以我们编写SQL语句时,就可以像人与人之间表达指令一样,就像查询语句先从SELECT开始(你需要什么),而逻辑查询就像机器执行指令的概念一样(先去找到执行地点,所以它首先处理FROM)。
SQL查询语句执行的逻辑顺序的更多相关文章
- SQL查询语句执行的顺序是-----------------
MSSQL逻辑查询的步骤 摘自:Microsoft SQL Server 2005技术内幕:T-SQL查询: 逻辑查询处理中的各个阶段 本节介绍逻辑查询处理所涉及的各个阶段.我先简要描述一下每个阶段, ...
- SQL查询语句执行流程
msyql执行流程 你有个最简单的表,表里只有一个 ID 字段,在执行下面这个查询语句时:: select * from T where ID=10: 我们看到的只是输入一条语句,返回一个结果,却不知 ...
- SQL查询语句执行速度快,存储过程执行慢
今天一个生成10w条数据的存储过程执行了95s,但是单独执行SQL语句只需要28s,查资料后发现原来这是存储过程的机制导致的,也就是传说中的参数嗅探 网上的一段话: (1)可能是发生了参数嗅探,第一次 ...
- 浅谈SQL优化入门:1、SQL查询语句的执行顺序
1.SQL查询语句的执行顺序 (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table> (3) <join_ ...
- SQL逻辑查询语句执行顺序 需要重新整理
一.SQL语句定义顺序 1 2 3 4 5 6 7 8 9 10 SELECT DISTINCT <select_list> FROM <left_table> <joi ...
- python 3 mysql sql逻辑查询语句执行顺序
python 3 mysql sql逻辑查询语句执行顺序 一 .SELECT语句关键字的定义顺序 SELECT DISTINCT <select_list> FROM <left_t ...
- mysql第四篇--SQL逻辑查询语句执行顺序
mysql第四篇--SQL逻辑查询语句执行顺序 一.SQL语句定义顺序 SELECT DISTINCT <select_list> FROM <left_table> < ...
- oracle中sql查询语句的执行顺序
查询语句的处理过程主要包含3个阶段:编译.执行.提取数据(sql查询语句的处理主要是由用户进程和服务器进程完成的,其他进程辅助配合) 一.编译parse 在进行编译时服务器进程会将sql语句的正文放入 ...
- MySQL数据库详解(一)执行SQL查询语句时,其底层到底经历了什么?
一条SQL查询语句是如何执行的? 前言 大家好,我是WZY,今天我们学习下MySQL的基础框架,看一件事千万不要直接陷入细节里,你应该先鸟瞰其全貌,这样能够帮助你从高维度理解问题.同样,对于MyS ...
随机推荐
- PHPStorm操作小技巧
1.围绕选中字符输入引号或者括号 2.设置服务器部署 3.隐藏Project快捷键 Shift + Esc 4.IDE内窗口切换 Ctrl + TAB 5.关闭当前项目 File -> Clos ...
- Windows里安装wireshark或者ethereal工具(包括汉化破解)(图文详解)
不多说,直接上干货! https://www.wireshark.org/download.html 我这里,读取的是,来自于https://www.ll.mit.edu/ideval/data/19 ...
- Freemarker不显示对象的属性
Freemarker不显示对象的属性 今天使用Freemarker在springboot项目中通过模板生成一些html文件.但是发现没有显示对象的属性. 找了很长时间,终于发现不显示对象的属性可能是两 ...
- mysql经典查询
建立数据库 1.建立一个数据库 create database work; 2.进入数据库work use work; 3.数据库默认编码可能不支持中文,可以在这里设置下 set names gbk; ...
- STL中deque 解析
一.deque的中控器 deque是连续空间(至少逻辑上看来如此),连续线性空间总令我们联想到array或vector.array无法成长,vector虽可成长,却只能向尾端成长,而且其所谓的成长原是 ...
- UVM序列篇之二:sequence和item(上)
无论是自驾item,穿过sequencer交通站,通往终点driver,还是坐上sequence的大巴,一路沿途观光,最终跟随导游停靠到风景点driver,在介绍如何驾驶item和sequence,遵 ...
- HDFS常用shell命令
注,其实常用命令不用网上搜,和linux下的命令很类似,触类旁通,直接在linux 上 hadoop fs 看一下就行了,不需要刻意去记我把 linux 上的 help 列举下,方便直接看吧,hdfs ...
- 去除tableView表头悬浮
UITableView设置为UITableViewStyleGrouped样式会出现多余间距,以前遇到过这样的问题,自己以为不难,只是一个知识点,也没太在意 ,今天又碰到了,发现自己把它给忘了,所以还 ...
- shell脚本:行列转换
Mybatis中写sql,如select,会涉及到一长串列名. `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) COLLATE ut ...
- ashx+jsonp+document.referrer
-- 一年前学的JSONP 跨域,一年后的今天相关知识点基本忘光.花了一天时间重新学习,再次感谢各位前辈的帖子,特此记录如下. --html <!DOCTYPE html PUBLIC &quo ...