SQL执行顺序

news2024/10/1 19:41:36

目录

1.执行顺序

 2.SELECT查询时的两个顺序

3.关联过程


1.执行顺序

  1. 我们先执行from,join来确定表之间的连接关系,得到初步的数据

  2. where对数据进行普通的初步的筛选

  3. group by 分组

  4. 各组分别执行having中的普通筛选或者聚合函数筛选。

  5. 然后把再根据我们要的数据进行select,可以是普通字段查询也可以是获取聚合函数的查询结果,如果是集合函数,select的查询结果会新增一条字段

  6. 将查询结果去重distinct

  7. 最后合并各组的查询结果,按照order by的条件进行排序

 

 2.SELECT查询时的两个顺序

1.关键字的顺序是不能颠倒的:

SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...

2.SELECT语句的执行顺序(在MySQL和Oracle中,SELECT执行顺序基本相同)

FROM > WHERE > GROUP BY > HAVING > SELECT的字段 > DISTINCT > ORDER BY > LIMIT

3.例子

SELECT DISTINCT player_id, player_name, count(*) as num #顺序5
FROM player JOIN team ON player.team_id = team.team_id #顺序1
WHERE height > 1.80 #顺序2
GROUP BY player.team_id #顺序3
HAVING num > 2 #顺序4
ORDER BY num DESC #顺序6
LIMIT 2 #顺序7

在SELECT语句执行这些步骤的时候,每个步骤都会产生一个虚拟表,然后将这个虚拟表传入下一个步骤中作为输入。需要注意的是,这些步骤隐含在SQL的执行过程中,对于我们来说是不可见的。

3.关联过程

1.from&join&where

用于确定我们要查询的表的范围,涉及哪些表。

选择一张表,然后用join连接

from table1 join table2 on table1.id=table2.id

选择多张表,用where做关联条件

from table1,table2 where table1.id=table2.id

我们会得到满足关联条件的两张表的数据,不加关联条件会出现笛卡尔积。

2.group by

按照我们的分组条件,将数据进行分组,但是不会筛选数据。

3.having&where

having中可以是普通条件的筛选,也能是聚合函数。而where只能是普通函数,一般情况下,有having可以不写where,把where的筛选放在having里,SQL语句看上去更丝滑。

使用where再group by

先把不满足where条件的数据删除,再去分组

使用group by再having

先分组再删除不满足having条件的数据,这两种方法有区别吗,几乎没有!

4.select

分组结束之后,我们再执行select语句,因为聚合函数是依赖于分组的,聚合函数会单独新增一个查询出来的字段,这里我们两个id重复了,我们就保留一个id,重复字段名需要指向来自哪张表,否则会出现唯一性问题。最后按照用户名去重。

select employee.id,distinct name,salary, avg(salary)

将各组having之后的数据再合并数据。

5.order by

最后我们执行order by 将数据按照一定顺序排序,比如这里按照id排序。如果此时有limit那么查询到相应的我们需要的记录数时,就不继续往下查了。

6.limit

记住limit是最后查询的,为什么呢?假如我们要查询年级最小的三个数据,如果在排序之前就截取到3个数据。实际上查询出来的不是最小的三个数据而是前三个数据了,记住这一点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/95681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

00后女记者的一场直播挑战,触动了多少城市年轻打工人的心

一、00后的女记者,在浙江的一个小镇做了一场直播挑战,几天的体验并不轻松,却打开了一个新世界。又或者说,她发现了生活的另一面,人生的另一种可能。这个名叫濮院的小镇,位于浙江北部,桐乡辖下&a…

测试员求职路漫漫其修远兮,HR眼中的你,为什么无人问津

📌 博客主页: 程序员二黑 📌 专注于软件测试领域相关技术实践和思考,持续分享自动化软件测试开发干货知识! 📌 公号同名,欢迎加入我的测试交流群,我们一起交流学习! 许多…

GrapeCity Documents .NET Bundle 6.0.0 Crack

GrapeCity 文档 .NET 包 6.0.0 添加新的图像查看器和数据查看器以及将 HTML 呈现为 PDF 的能力。2022 年 12 月 16 日 - 15:27 新版本特征 GrapeCity Word文档 您现在可以添加反射、发光、模糊、柔化边缘和填充叠加效果。报告模板 SVG 图像现在可以用作图像模板中的数据。有条件…

SOFA Weekly|Tongsuo 8.3.2 版本发布、C 位大咖说、本周 Contributor QA

SOFA WEEKLY | 每周精选 筛选每周精华问答,同步开源进展欢迎留言互动~SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件&#…

[附源码]Python计算机毕业设计Django宁财二手物品交易网站

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

换种方式看后端参数接收、建议躺着看!!!

持续创作,加速成长!这是我参与「掘金日新计划 10 月更文挑战」的第1天,点击查看活动详情 常用的接收参数注解RequestParam PathVariable RequestBody 先看个例子RestController public class testController { RequestMapping(value "…

C++ Reference: Standard C++ Library reference: Containers: map: map: operator=

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/operator/ 公有成员函数 <map> std::map::operator C98 copy (1) map& operator (const map& x); C11 copy (1) map& operator (const map& x); move (2) map& oper…

Linux学习04-文件权限与目录配置

1 用户和用户组的概念 Linux中的用户划分很有意义。分为用户、用户组与非本用户组。模式类似于学校的机房。 2 文件权限 使用ls -al查看文件权限&#xff1a; [rootstudy ~]# ls -al -rw-r--r--. 1 root root 1864 May 4 18:01 initial-setup-ks.cfg [ 1…

vue3表单输入绑定 v-model

vue3表单输入绑定 v-model 一、基本使用 1.1、v-model 使用 <template><input type"text" v-model"msg"/><h2>{{msg}}</h2> </template><script setup> import { ref} from vue const msgref("Hello World&quo…

Vue中路由守卫的具体应用

目录 &#x1f53d; 概述 1. 全局守卫——全局钩子函数 1.1 全局前置守卫——beforeEach 1.2 全局后置路由守卫 1.3 整合 2. 路由独享的守卫——路由独享的钩子函数 3.组件内的守卫——组件内的钩子函数 &#x1f53d; 参考资料 Vue-Router导航&#xff08;路由&#x…

卫龙上市酿成资本惨剧:CPE损失上亿美元 高瓴浮亏5000万美元

雷帝网 雷建平 12月16日本是年度最受期待的新消费企业上市&#xff0c;却酿成资本惨剧。“辣条一哥”卫龙&#xff08;股票代码为&#xff1a;“09985”&#xff09;昨日在港交所上市&#xff0c;发行价为10.56港元&#xff0c;募资净额为8.99亿港元&#xff1b;卫龙食品首日开…

大数据中的数据安全

数据安全体系全貌 在数据仓库平台中&#xff0c;对应数据的请求必须严格尊属数据安全体系 数据使用安全 数据安全 认证 授权 认证主要是对用户的身份确认&#xff0c;比如最简单的用户的登录需要账户和密码&#xff1b;像你登录Mysql需要输出用户名和密码。比如大数据中使用…

爱科赛博冲刺科创板:拟募资3.8亿 陕西集成电路与达晨是股东

雷递网 雷建平 12月16日西安爱科赛博电气股份有限公司&#xff08;简称&#xff1a;“爱科赛博”&#xff09;日前递交招股书&#xff0c;准备在科创板上市。爱科赛博计划募资3.8亿。其中&#xff0c;1.2亿用于西安爱科赛博电气股份有限公司精密特种电源产业化建设项目&#xf…

2022.12.5-12.11 AI行业周刊(第127期):一起做时间的朋友

最近沸沸扬扬的就是核酸疫情的事情&#xff0c;突然之间&#xff0c;一下子全国都放开了&#xff0c;很不适应。 大宝在上幼儿园中班&#xff0c;上上个星期&#xff0c;学校的政策&#xff0c;还是没有核酸证明不得入校。 而上周末发的通知&#xff0c;已经是不得在外做核酸…

AIGC音乐生成#riff + diffusion 以生成频谱图图像来转换为音乐 | 无界日报 第2期

小杜无界日报第2期&#xff0c;本期头条 - stable diffusion 微调模型 riff diffusion 以生成频谱图图像来转换为音乐。无界日报2022.12.16第02期- 头条 -riff diffusion#AIGC# #工具#riff diffusion 是 stable diffusion 的微调模型&#xff0c;以生成频谱图图像来转换为音…

(文章复现)8.基于共享储能电站的工业用户日前优化经济调度

目录 复现文章&#xff1a; 摘要&#xff1a; 部分程序&#xff1a; 输出结果&#xff1a; 15r 复现文章&#xff1a; 基于共享储能电站的工业用户日前优化经济调度——李淋&#xff08;电力建设2020&#xff09; 摘要&#xff1a; 文章提出一种基于共享储能电站的工业…

【计算机网络】:2-物理层

物理层 物理层考虑的是怎样才能在各种计算机的传输媒体上传输数据比特流&#xff0c;主要涉及到的领域包括信号传播、电信系统等&#xff0c;与计算机软件相关较少 1.物理层介绍 物理层为数据链路层屏蔽了各种传输媒体的差异&#xff0c;使数据链路层 只需要考虑本层 的的协…

《Linux内核源码分析》课程笔记

《Linux内核源码分析》课程笔记漏洞安全与虚拟内存CPU缓存技术malloc系统调用中断锁与IPC机制MMU内存页回收内核设备驱动程序内核启动流程这个课好烂&#xff0c;就是打广告用的。出现的老师的英语听着难受。 漏洞安全与虚拟内存 CPU架构&#xff1a;1、X86架构&#xff0c;采…

绿盟SecXOps安全智能分析技术白皮书

数据共享 定义内涵 数据共享 是指在多个用户或多个程序之间遵循一定规则共同享用数据&#xff0c;并进行各种操作、运算和分析的一种技术。数据共享包括数据发布、接口、交换等内容。 技术背景 随着数字经济成为拉动全球经济增长的新引擎&#xff0c;大数据成为经济中重要的…

微服务框架 SpringCloud微服务架构 多级缓存 48 多级缓存 48.7 Redis 缓存预热

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 多级缓存 文章目录微服务框架多级缓存48 多级缓存48.7 Redis 缓存预热48.7.1 添加Redis 缓存的需求48.7.2 冷启动和缓存预热48.7.3 缓存预热…