sql专题 之 sql的执行顺序
文章目录
- sql的执行顺序
- sql语句的格式
- 实际的执行顺序:
- 虚拟表 vs 数据集
- 虚拟表
- 结果集
- 总结
- 嵌套查询在sql查询中的执行顺序
前文我们了解了sql常用的语句,这次我们对于这些语句来个小思索
戳这里→ sql专题 之 常用命令
sql的执行顺序
SQL语句的执行顺序是数据库查询优化和结果生成的关键
sql语句的格式
select distinct 要查的字段,sum(列字段),开窗函数from 左表l [left|inner] join 右表r on 连接条件where 筛选条件1 and 筛选条件2group by 分组的字段having 组的条件order by 排序的字段limit 限制数量;
实际的执行顺序:
① from 左表l ② [left|inner] join 右表r on 连接条件⑧ select ⑨ distinct 要查的字段,⑤ sum(列字段),⑦ 开窗函数③ where 筛选条件1 and 筛选条件2④ group by 分组的字段⑥ having 组的条件⑩ order by 排序的字段⑪ limit 限制数量;
- 1、from
识别查询的数据源,即确定要查询的表。
如果from子句中包含多个表,那么就会进行第二步 - 2、join on
对from句中的表进行连接操作。可以是内连接(inner join)、左连接(left join)、右连接(right join)。连接的结果会生成一个新的包含所需数据的虚拟表
- 3、where … and
对虚拟表中的记录进行进一步的筛选,以排除不符合条件的记录。筛选后的结果又会生成一个新的虚拟表
- 4、group by
对虚拟表中的数据按照一个或者多个行进行分组,分组后仍会生成一个新的虚拟表
- 5、聚合函数:avg、sum、count等
使用聚合函数对每个组进行计算,并得出每个组的统计信息,然后将计算结果添加到group by的虚拟表中
- 6、having
对分组之后的结果进行进一步的筛选,筛选后的结果会生成一个新的虚拟表
- 7、开窗函数
对分组后的结果进行窗口函数计算,并生成一个新的结果集
- 8、select [distinct]
在having生成的虚拟表中选出符合条件的列,并生成一个新的结果集。
如果使用了别名,也会进行替换。 - 9、distinct
去除结果集中的重复行。
去重后的结果也会生成一个新的结果集。 - 10、order by
对结果集中的数据进行排序。
排序后的结果会生成一个游标(注意,不是表了。因为排序会改变数据的物理顺序) - 11、limit/offset:返回限定的数量
返回限制的数据数量,或者返回指定从哪条记录开始返回。
虚拟表 vs 数据集
虚拟表
通常指一种不实际存储数据的表结构,可是是视图、派生表或临时表。基于其他表或者查询的结果动态生成
- 视图:
create view my_view as select * from student where class_id is not null这里的my_view是一个视图,它是基于student表中class_id不为空的条件生成的一个虚拟表。
视图的虚拟表结构可以被定义并存储在数据库中,供后续查询使用 - 派生表
(select * from student where class_id is not null) as s1s1为派生表,是基于student表中class_id不为空的条件动态生成的
- 虚拟表的特点:
- 虚拟表是基于其他表或查询的结果动态生成的,本身不存储数据
- 数据库管理系统可以对虚拟表进行查询优化,因为它们通常是基于特定查询需求动态生成的。
- 可以被定义并存储在数据库中,供后续查询重用。即可重用性
结果集
SQL查询执行后返回的数据集合称为结果集,它包含了符合查询条件的所有行和列。
select sno,name from student where class_id is not null
这个查询会返回一个结果集,其中包含student表中满足class_id不为空的所有行和sno、name列
- 特点:
- 包含了查询返回的实际数据,这些数据可以是来自一个或多个表的行和列的组合。
- 结果集通常是临时的。一旦查询执行完毕,结果集就会被释放(除非它被存储在某个地方,如变量、临时表或文件中)。
- 可处理性的。结果集可以在编程语言中通过API进行处理,如遍历、排序、筛选等。
总结
- 存储与生成:
虚拟表通常不存储实际数据,而是基于其他表或查询动态生成;
结果集是查询执行后实际返回的数据集合。 - 持久性
虚拟表可以存储在数据库中供后续查询重用
结果集通常是临时的,一旦查询完成就会被释放。 - 用途
虚拟表常用于简化复杂查询、提高查询可读性和可维护性;
结果集则是查询执行后的直接输出,用于数据处理和展示。
嵌套查询在sql查询中的执行顺序
以下的代码都是简化的,我们假设有开窗函数、group by、having、order by、limit等限制
-
在 select 子句中的嵌套查询
SELECT sno,(SELECT AVG(score) FROM student) AS average_score FROM student;# 上述sql语句执行起来性能不是很高,咱们在这里只是仅作为举例分析,切勿较真哈 # 对上述查询的优化如下: WITH AverageScore AS ( SELECT AVG(score) AS avg_score FROM student) SELECT s.sno, a.avg_score AS average_score FROM student s, AverageScore a;优先执行嵌套中的子查询,然后是外层的顺序,按照咱们上方介绍的来
-
在 WHERE 子句中的嵌套查询
SELECT sno, name FROM student WHERE class_id IN (select id FROM class WHERE class_teacher is not null);优先执行嵌套中的子查询,然后是外层的顺序,按照咱们上方介绍的来
SELECT sno, name
FROM (select * from newStudent where sex="女")as s
where age>=18
from本来就优先,from中的嵌套更得优先了。
相关文章:
sql专题 之 sql的执行顺序
文章目录 sql的执行顺序sql语句的格式实际的执行顺序:虚拟表 vs 数据集虚拟表 结果集总结嵌套查询在sql查询中的执行顺序 前文我们了解了sql常用的语句,这次我们对于这些语句来个小思索 戳这里→ sql专题 之 常用命令 sql的执行顺序 SQL语句的执行顺序是…...
Vue3 -- 基于Vue3+TS+Vite项目【项目搭建及初始化】
兼容性注意: Vite 需要 Node.js 版本 18+ 或 20+。然而,有些模板需要依赖更高的 Node 版本才能正常运行,当你的包管理器发出警告时,请注意升级你的 Node 版本。【摘抄自vite官网】 这里我用的node版本是 v18.20.2 创建项目: 创建项目我们可以使用npm、yarn、pnpm、bun …...
CTF-RE: TEA系列解密脚本
// // Created by A5rZ on 2024/10/26. //#ifndef WORK_TEA_H #define WORK_TEA_H#endif //WORK_TEA_H#include <cstdint> #include <cstdio>// 定义TEA加密算法的轮次,一般建议为32轮 #define TEA_ROUNDS 32 #define DELTA 0x9e3779b9// TEA加密函数 v…...
信号量和线程池
1.信号量 POSIX信号量,用与同步操作,达到无冲突的访问共享资源目的,POSIX信号量可以用于线程间同步 初始化信号量 #include <semaphore.h> int sem_init(sem_t *sem, int pshared, unsigned int value); sem:指向sem_t类…...
【人工智能】10分钟解读-深入浅出大语言模型(LLM)——从ChatGPT到未来AI的演进
文章目录 一、前言二、GPT模型的发展历程2.1 自然语言处理的局限2.2 机器学习的崛起2.3 深度学习的兴起2.3.1 神经网络的训练2.3.2 神经网络面临的挑战 2.4 Transformer的革命性突破2.4.1 Transformer的核心组成2.4.2 Transformer的优势 2.5 GPT模型的诞生与发展2.5.1 GPT的核心…...
「QT」几何数据类 之 QPointF 浮点型点类
✨博客主页何曾参静谧的博客📌文章专栏「QT」QT5程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…...
可能是全网第一个MySQL Workbench插件编写技巧
引言 应公司要求,数据库的敏感数据在写入到数据库中要进行加密,但是在测试环境查询数据的时候要手动解密,很不方便,有的时候数据比较多,解密比较麻烦。遂研究了一下如何通过 MySQL Workbench 的插件来实现查询数据一键…...
D62【python 接口自动化学习】- python基础之数据库
day62 SQL 基础 学习日期:20241108 学习目标:MySQL数据库-- 131 SQL基础和DDL 学习笔记: SQL的概述 SQL语言的分类 SQL的语法特征 DDL - 库管理 DDL - 表管理 总结 SQL是结构化查询语言,用于操作数据库,通用于绝大…...
探索美赛:从准备到挑战的详细指南
前言 美国大学生数学建模竞赛(MCM/ICM),简称“美赛”,是全球规模最大的数学建模竞赛之一。它鼓励参赛者通过数学建模来解决现实世界中的复杂问题,广受世界各地大学生的欢迎。本文将详细介绍美赛的全过程,从…...
IP地址查询——IP归属地离线库
自从网络监管部门将现实IP地址列入监管条例,IP地址的离线库变成网络企业发展业务的不可或缺的一部分,那么IP地址离线库是什么,又能够给我们带来什么呢? 什么是IP地址离线库? IP地址离线库是IP地址服务商将通过各种合…...
“倒时差”用英语怎么说?生活英语口语学习柯桥外语培训
“倒时差”用英语怎么说? “倒时差”,这个让无数旅人闻之色变的词汇,在英语中对应的正是“Jet Lag”。"Jet" 指的是喷气式飞机,而 "lag" 指的是落后或延迟。这个短语形象地描述了当人们乘坐喷气式飞机快速穿…...
Linux入门攻坚——37、Linux防火墙-iptables-3
私网地址访问公网地址的问题,请求时,目标地址是公网地址,可以在公网路由器中进行路由,但是响应报文的目的地址是私网地址,此时在公网路由器上就会出现问题。公网地址访问私网地址的问题,需要先访问一个公网…...
微服务架构面试内容整理-安全性-Spring Security
Spring Security 是 Spring 框架中用于实现认证和授权的安全模块,它提供了全面的安全解决方案,可以帮助开发者保护 Web 应用、微服务和 API 免受常见的安全攻击。以下是 Spring Security 的主要特点、工作原理和使用场景: 主要特点 1. 身份认证与授权: 提供多种认证方式,…...
新的服务器Centos7.6 安装基础的环境配置(新服务器可直接粘贴使用配置)
常见的基础服务器配置之Centos命令 正常来说都是安装一个docker基本上很多问题都可以解决了,我基本上都是通过docker去管理一些容器如:mysql、redis、mongoDB等之类的镜像,还有一些中间件如kafka。下面就安装一个 docker 和 nginx 的相关配置…...
深度学习:广播机制
广播机制(Broadcasting)是 PyTorch(以及其他深度学习框架如 NumPy)中的一种强大功能,它允许不同形状的张量进行逐元素操作,而不需要显式地扩展张量的维度。广播机制通过自动扩展较小的张量来匹配较大张量的…...
音视频入门基础:FLV专题(25)——通过FFprobe显示FLV文件每个packet的信息
音视频入门基础:FLV专题系列文章: 音视频入门基础:FLV专题(1)——FLV官方文档下载 音视频入门基础:FLV专题(2)——使用FFmpeg命令生成flv文件 音视频入门基础:FLV专题…...
Openstack7--安装消息队列服务RabbitMQ
只需要在控制节点安装 安装RabbitMQ yum -y install rabbitmq-server 启动RabbitMQ并设置开机自启 systemctl start rabbitmq-server;systemctl enable rabbitmq-server 创建 rabbitmq 用户 并设置密码为 000000 rabbitmqctl add_user rabbitmq 000000 如果你不慎创错了…...
day55 图论章节刷题Part07([53.寻宝]prim算法、kruskal算法)
前言:使用最小生成树的方法解决将所有节点连接起来所需的最小路径问题。 prim算法 Prim算法是一种贪心算法,从任意一个顶点开始构建最小生成树。每次选择当前已加入生成树的顶点中,距离最近的尚未加入生成树的顶点,直到所有顶点…...
LeetCode 93-复制 IP地址
题目链接:LeetCode93 欢迎留言交流,每天都会回消息。 class Solution {//定义结果集,返回最终结果List<String> rs new ArrayList<>();public List<String> restoreIpAddresses(String s) {//将字符串包装为可变长度的字…...
海底捞点单
单点锅底推荐: 番茄锅底通31 牛油麻辣通44 清汤麻辣备44 菌汤锅底通31 小吃&主食: 捞派捞面一黄金小馒头一茴香小油条 红糖枇杷一小酥肉 DIY锅底推荐: 1.寿喜锅:海鲜味酱4勺陈醋1勺蚝油2勺盐适量白糖7勺 芹菜1勺 2.麻辣锅底…...
Conda环境回滚实战:当安装新包搞崩base环境时如何一键恢复
Conda环境回滚实战:当安装新包搞崩base环境时如何一键恢复 在Python开发中,conda作为包管理和环境管理的利器,几乎成为数据科学家的标配工具。但越是频繁使用conda,越容易遇到一个令人头疼的问题——在base环境中安装新包后&#…...
在线PPT工具哪个最方便快捷?6款主流工具实测,新手也能快速出片
作为AI博主,日常要产出AI工具实测、智能创作干货、高效办公教程,对在线PPT工具的核心需求远超基础编辑——全端适配、AI生成专业、安全合规、资源充足,无需复杂操作,既能依托AI快速生成高质量内容,又能兼顾多场景使用与…...
双向充放电前馈控制:储能变流器PCS_PWM变流器的SVPWM调制与实现
【复现】储能变流器PCS_PWM变流器双向充放电前馈控制SVPWM调制 1、电路构成:三相电网、三相 PWM变流器、Buck/Boost 变换器和蓄电池 2、三相变流器控制:采用电压外环、电流内环双闭环PI 控制,电网电压和电容电流前馈,电感电流解耦…...
保姆级教程:用STM32的定时器输入捕获功能,手把手教你解码任意红外遥控器
STM32定时器输入捕获实战:从零解码未知协议红外遥控信号 红外遥控技术在家电控制领域已有数十年历史,但面对市面上五花八门的遥控协议,开发者常常陷入协议适配的泥潭。本文将带你突破协议限制,利用STM32的定时器输入捕获功能&…...
工程伦理案例分析:从经典失败项目看责任分配与风险预防
工程伦理案例分析:从经典失败项目看责任分配与风险预防 当一座桥梁在通车典礼上轰然倒塌,当一栋新建大楼在台风中支离破碎,这些触目惊心的工程事故背后,往往隐藏着复杂的伦理困境。工程伦理不是简单的对错判断题,而是需…...
【flash-attn安装成功却import失败?一个ABI参数引发的‘血案’】
1. 为什么flash-attn安装成功却import失败? 最近在部署Llama2模型时,遇到了一个让人抓狂的问题:明明用pip安装了flash-attn,执行import时却报错提示找不到这个包。更诡异的是,pip list明明显示安装成功了,…...
【T型三电平仿真】SPWM调制中的单双极性载波特性对比
1. T型三电平逆变器基础认知 第一次接触T型三电平拓扑时,我被它精巧的结构设计惊艳到了。与传统的两电平逆变器相比,这种拓扑在每相桥臂上增加了两个钳位开关管,形成了独特的"T"字形结构。实际搭建电路时,你会发现它的输…...
终极指南:3步用VR-Reversal将3D视频转为2D,普通设备也能自由探索VR世界
终极指南:3步用VR-Reversal将3D视频转为2D,普通设备也能自由探索VR世界 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址…...
动态间隙精准诊断:NHJX-13 型底盘间隙仪机动车底盘安全检测全方案
动态间隙精准诊断:NHJX-13 型底盘间隙仪机动车底盘安全检测全方案在机动车安全环保检测体系中,底盘间隙仪是诊断车辆转向机构、悬挂系统、传动部件间隙状况的核心设备,尤其对大中型客车、重中型货车等营运车辆,其性能直接决定底盘…...
Java应用内存泄漏排查实战:MAT工具从入门到精通(附常见问题解析)
Java应用内存泄漏排查实战:MAT工具从入门到精通 引言:为什么我们需要关注内存泄漏? 记得去年我们团队接手的一个电商项目吗?上线三个月后,系统开始频繁出现OOM(OutOfMemoryError)错误。每次重启…...
