当前位置: 首页 > news >正文

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 连接条件⑧ selectdistinct 要查的字段,sum(列字段),⑦ 开窗函数③ where 筛选条件1 and 筛选条件2group 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 nullas 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
FROMselect * 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加密算法的轮次&#xff0c;一般建议为32轮 #define TEA_ROUNDS 32 #define DELTA 0x9e3779b9// TEA加密函数 v…...

信号量和线程池

1.信号量 POSIX信号量&#xff0c;用与同步操作&#xff0c;达到无冲突的访问共享资源目的&#xff0c;POSIX信号量可以用于线程间同步 初始化信号量 #include <semaphore.h> int sem_init(sem_t *sem, int pshared, unsigned int value); sem&#xff1a;指向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 浮点型点类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…...

可能是全网第一个MySQL Workbench插件编写技巧

引言 应公司要求&#xff0c;数据库的敏感数据在写入到数据库中要进行加密&#xff0c;但是在测试环境查询数据的时候要手动解密&#xff0c;很不方便&#xff0c;有的时候数据比较多&#xff0c;解密比较麻烦。遂研究了一下如何通过 MySQL Workbench 的插件来实现查询数据一键…...

D62【python 接口自动化学习】- python基础之数据库

day62 SQL 基础 学习日期&#xff1a;20241108 学习目标&#xff1a;MySQL数据库-- 131 SQL基础和DDL 学习笔记&#xff1a; SQL的概述 SQL语言的分类 SQL的语法特征 DDL - 库管理 DDL - 表管理 总结 SQL是结构化查询语言&#xff0c;用于操作数据库&#xff0c;通用于绝大…...

探索美赛:从准备到挑战的详细指南

前言 美国大学生数学建模竞赛&#xff08;MCM/ICM&#xff09;&#xff0c;简称“美赛”&#xff0c;是全球规模最大的数学建模竞赛之一。它鼓励参赛者通过数学建模来解决现实世界中的复杂问题&#xff0c;广受世界各地大学生的欢迎。本文将详细介绍美赛的全过程&#xff0c;从…...

IP地址查询——IP归属地离线库

自从网络监管部门将现实IP地址列入监管条例&#xff0c;IP地址的离线库变成网络企业发展业务的不可或缺的一部分&#xff0c;那么IP地址离线库是什么&#xff0c;又能够给我们带来什么呢&#xff1f; 什么是IP地址离线库&#xff1f; IP地址离线库是IP地址服务商将通过各种合…...

“倒时差”用英语怎么说?生活英语口语学习柯桥外语培训

“倒时差”用英语怎么说&#xff1f; “倒时差”&#xff0c;这个让无数旅人闻之色变的词汇&#xff0c;在英语中对应的正是“Jet Lag”。"Jet" 指的是喷气式飞机&#xff0c;而 "lag" 指的是落后或延迟。这个短语形象地描述了当人们乘坐喷气式飞机快速穿…...

Linux入门攻坚——37、Linux防火墙-iptables-3

私网地址访问公网地址的问题&#xff0c;请求时&#xff0c;目标地址是公网地址&#xff0c;可以在公网路由器中进行路由&#xff0c;但是响应报文的目的地址是私网地址&#xff0c;此时在公网路由器上就会出现问题。公网地址访问私网地址的问题&#xff0c;需要先访问一个公网…...

微服务架构面试内容整理-安全性-Spring Security

Spring Security 是 Spring 框架中用于实现认证和授权的安全模块,它提供了全面的安全解决方案,可以帮助开发者保护 Web 应用、微服务和 API 免受常见的安全攻击。以下是 Spring Security 的主要特点、工作原理和使用场景: 主要特点 1. 身份认证与授权: 提供多种认证方式,…...

新的服务器Centos7.6 安装基础的环境配置(新服务器可直接粘贴使用配置)

常见的基础服务器配置之Centos命令 正常来说都是安装一个docker基本上很多问题都可以解决了&#xff0c;我基本上都是通过docker去管理一些容器如&#xff1a;mysql、redis、mongoDB等之类的镜像&#xff0c;还有一些中间件如kafka。下面就安装一个 docker 和 nginx 的相关配置…...

深度学习:广播机制

广播机制&#xff08;Broadcasting&#xff09;是 PyTorch&#xff08;以及其他深度学习框架如 NumPy&#xff09;中的一种强大功能&#xff0c;它允许不同形状的张量进行逐元素操作&#xff0c;而不需要显式地扩展张量的维度。广播机制通过自动扩展较小的张量来匹配较大张量的…...

音视频入门基础:FLV专题(25)——通过FFprobe显示FLV文件每个packet的信息

音视频入门基础&#xff1a;FLV专题系列文章&#xff1a; 音视频入门基础&#xff1a;FLV专题&#xff08;1&#xff09;——FLV官方文档下载 音视频入门基础&#xff1a;FLV专题&#xff08;2&#xff09;——使用FFmpeg命令生成flv文件 音视频入门基础&#xff1a;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算法)

前言&#xff1a;使用最小生成树的方法解决将所有节点连接起来所需的最小路径问题。 prim算法 Prim算法是一种贪心算法&#xff0c;从任意一个顶点开始构建最小生成树。每次选择当前已加入生成树的顶点中&#xff0c;距离最近的尚未加入生成树的顶点&#xff0c;直到所有顶点…...

LeetCode 93-复制 IP地址

题目链接&#xff1a;LeetCode93 欢迎留言交流&#xff0c;每天都会回消息。 class Solution {//定义结果集&#xff0c;返回最终结果List<String> rs new ArrayList<>();public List<String> restoreIpAddresses(String s) {//将字符串包装为可变长度的字…...

海底捞点单

单点锅底推荐&#xff1a; 番茄锅底通31 牛油麻辣通44 清汤麻辣备44 菌汤锅底通31 小吃&主食&#xff1a; 捞派捞面一黄金小馒头一茴香小油条 红糖枇杷一小酥肉 DIY锅底推荐&#xff1a; 1.寿喜锅&#xff1a;海鲜味酱4勺陈醋1勺蚝油2勺盐适量白糖7勺 芹菜1勺 2.麻辣锅底…...

It’s All About Your Sketch: Democratising Sketch Control in Diffusion Models

翻译&#xff1a; 摘要 本文揭示了草图在扩散模型中的潜力&#xff0c;解决了生成式人工智能中直接草图控制的虚假承诺。我们重要的是使这个过程更加普及&#xff0c;让业余的草图也能生成精确的图像&#xff0c;真正实现“你画的就是你得到的”。一项初步研究强调了这一研究的…...

Java基础-组件及事件处理(下)

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 面板组件 说明 常见组件 JScrollPane常用构造方法 JScrollPane设置面板滚动策略的方法 JScrollPane滚…...

npm list -g --depth=0(用来列出全局安装的所有 npm 软件包而不显示它们的依赖项)

您提供的命令 npm list -g --depth0 是在 Node Package Manager (npm) 的上下文中使用的&#xff0c;用来列出全局安装的所有 npm 软件包而不显示它们的依赖项。 这是它的运作方式&#xff1a; npm list -g --depth0-g: 指定列表应包括全局安装的软件包。--depth0: 限制树形结…...

深度学习:nn.Linear

nn.Linear 是 PyTorch 中的一个线性层&#xff08;全连接层&#xff09;&#xff0c;用于将输入张量从一个维度空间映射到另一个维度空间。具体来说&#xff0c;nn.Linear 执行以下操作&#xff1a; outputinputweightTbias 其中&#xff1a; input 是输入张量。 weight 是权重…...

大数据新视界 -- 大数据大厂之 Impala 性能提升:高级执行计划优化实战案例(下)(18/30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...

常用的Anaconda Prompt命令行指令

一、环境管理 查看已安装的环境 conda env list 或 conda info --envs&#xff1a;列出所有已安装的Anaconda环境。 创建新环境 conda create -n env_name pythonx.x&#xff1a;创建一个名为env_name的新环境&#xff0c;并指定Python版本为x.x。 激活环境 conda activate env…...

如何低成本、零代码开发、5分钟内打造一个企业AI智能客服?

传统客服因员工效率低、时段需求波动大、数据管理费时费力等管理难题&#xff0c;导致难以满足用户需求&#xff0c;无法深入挖掘客服数据价值&#xff0c;造成客源流失。而智能体搭建的“智能客服”能借助大模型和知识库知识&#xff0c;助力实现数字化运营&#xff0c;破解企…...

全网最全最新最细的MYSQL5.7下载安装图文教程

一、MYSQL两种安装包格式 MySQL安装文件分为两种&#xff0c;一种是msi格式的&#xff0c;一种是zip格式的。zip格式相当于绿色版&#xff0c;不需要安装&#xff0c;只需解压缩之后就可以使用了&#xff0c;但是要进行配置。msi格式是安装版。 二、MYSQL官网下载 1.官网地址…...

NoSQL数据库与关系型数据库的主要区别

NoSQL数据库与关系型数据库在多个方面存在显著区别&#xff0c;以下是对这些主要区别的详细描述&#xff1a; 一、数据存储模型 关系型数据库&#xff1a;使用表格形式存储数据&#xff0c;每个表格由行和列组成&#xff0c;行表示记录&#xff0c;列表示字段。数据之间的关系…...

ubuntu24.04安装matlab失败

又是摸鱼摆烂的一天&#xff0c;好难过&#xff5e; 官方教程&#xff1a;https://ww2.mathworks.cn/help/install/ug/install-products-with-internet-connection.html 问题描述&#xff1a;https://ww2.mathworks.cn/matlabcentral/answers/2158925-cannot-install-matlab-r2…...