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 s1
s1为派生表,是基于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.麻辣锅底…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案
引言 在分布式系统的事务处理中,如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议(2PC)通过准备阶段与提交阶段的协调机制,以同步决策模式确保事务原子性。其改进版本三阶段提交协议(3PC…...