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 ...
随机推荐
- CentOS7服务管理(重启,停止,自动启动命令)
我们对service和chkconfig两个命令都不陌生,systemctl 是管制服务的主要工具, 它整合了chkconfig 与 service功能于一体. systemctl is-enable ...
- python-生产者消费者模式
#!/usr/bin/python #coding=utf-8 import threading,time lock=threading.Condition() product=0 class Mak ...
- 基于Flume做FTP文件实时同步的windows服务。
需求:做一个windows服务,实现从ftp服务器实时下载或者更新文件到本地磁盘. 功能挺简单的.直接写个ftp工具类用定时器跑就能搞定,那我为什么不用呢? 别问,问就是我无聊啊,然后研究一下Flum ...
- mongo小记
进mongo mongo 先添加admin表的账号密码 . use admin . db.createUser( { user: "admin", pwd: "admin ...
- Abschlussarbeit:Konstruktion und Implementierung von Dota2 Datenbank Intelligent Verwaltungsplatfom
1.Die Hintergrund und Bedeutung des Themas Dank nicht ausreichendes Erkenntnisse der Spielplanner un ...
- Spring MVC 数据绑定流程分析
1. 数据绑定流程原理★ ① Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 Data ...
- 字符编码unicode,utf-8和ascii
Ascii编码 由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母.数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码 ...
- golang学习之接口型函数
先说下使用接口型函数的好处: 1.不必将某个接口函数附在某个type上面,保证了命名随意 2. 可以直接调用函数或者使用该接口,两两不耽误 直接上代码吧: // interface_func proj ...
- 京东-Java开发工程师-一面
时间:2017-4-7 16:47 时长:32分19秒 类型:笔试前电话面试 之前打过一个电话过来说了一声,下午就直接打过来面试了,没有自我介绍貌似 1. 你做的这些东西是什么样的? 2. 选一个你觉 ...
- 三、synchronized同步锁
一.简介 在Java多线程中,我们要实现同步串行最早接触的就是synchronized关键字. 基本语法如下: synchronized(锁) { // 代码块 } sychronized关键字的锁主 ...