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 ...
随机推荐
- redux在componentDidMount中出现的问题 --- state 不变
遇到这样一个问题: 在组件的componentDidMount中,我需要使用到redux中存储的某个状态. 但是有趣的是,当我再render中使用相同的状态时,状态会改变,但是在conponentDi ...
- Fedora 24 python3.5 安装M2Crypto
安装M2Crypto#python3 -m pip install M2Crypto 出现错误 gcc: /usr/lib/rpm/redhat/redhat-hardened-cc1:Nosuch ...
- 【ZooKeeper】单机伪集群搭建(适用于mac)
1.配置 .zookeeper下载地址:http://apache.mirrors.lucidnetworks.net/zookeeper/ 可以选择需要的版本,我下载的是zookeeper-3.4. ...
- nginx故障分析与记录
本文是对于自己遇到nginx故障的一些记录.便于以后解决问题. 时间:2018_05_11 场景一:某天很多客户在群里反应说访问网站不了,报504错误. 环境:首先说明一点的就是公司网站是美国,日本等 ...
- JDK源码--ArrayList浅析
先上别人的源码分析http://www.cnblogs.com/roucheng/p/jdkfenxi.html 这个链接也不错:http://www.jianshu.com/p/8d14b55fa1 ...
- JQuery Div scrollTop ScrollHeight
jQuery 里和滚动条有关的概念很多,但是有三个属性和滚动条的拖动有关,就是:scrollTop.scrollLeft.scrollHeight.其中 scrollHeight 属性,互联网上几乎搜 ...
- linux编程之GDB调试
GDB是一套字符界面的程序集,可以用它在linux上调试C和C++程序,它提供了以下的功能: 1 在程序中设置断点,当程序运行到断点处暂停 2 显示变量的值,可以打印或者监视某个变量,将某个变量的值显 ...
- XMPP之openfire无法启动
之前半个月自学ios的时候自己也配置过xmpp框架,也从github上下载了demo试了下,也是很完美运行的,最近想着再回头把XMPP框架系统的学习一下 ,毕竟当时学的时候还是在虚拟机中,卡死了.我这 ...
- ubuntu上安装R的时候遇到的问题总结
首先感谢这两篇博客的指导,第一篇是关于报错的总结,第二篇是第一篇中没有提到的错误,也就是我在安装的时候出现的错误. 1.下载R包 (去官网选择一个离你最近的镜像网址,我的是清华提供的镜像下载速度比较快 ...
- 0.ECMAScript 6 简介
ECMAScript 6简介 ECMAScript 6 简介 ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了.它的目 ...