【MySQL】第十一部分 SELECT的执行过程

news2025/1/13 9:44:58

【MySQL】第十一部分 SELECT的执行过程


文章目录

  • 【MySQL】第十一部分 SELECT的执行过程
  • 11. SELECT的执行过程
    • 11.1 SQL92语法的结构
    • 11.2 SQL92语法的结构
    • 11.3 语句执行顺序
    • 11.4 解释之前遗留问题
  • 总结


11. SELECT的执行过程

11.1 SQL92语法的结构

SELECT ...
FROM TABLE
WHERE 多表连接的条件 AND 不包含聚合函数的过滤条件
GROUP BY 分组	
HAVING 	包含聚合函数的过滤条件
ORDER BY 排序
LIMIT 限制数据条数

11.2 SQL92语法的结构

SELECT ...
FROM TABLE JOIN TABLE ON 多表连接的条件
WHERE 不包含聚合函数的过滤条件
GROUP BY 分组	
HAVING 	包含聚合函数的过滤条件
ORDER BY 排序
LIMIT 限制数据条数

11.3 语句执行顺序

两种语法执行顺序都是一样的

在这里插入图片描述

FROM ==> WHERE ==> GROUP BY ==> HAVING ==> SELECT ==> DISTINCT ==> ORDER BY ==> LIMIT
# 查询10,20,30,40,50号部门中最高薪资并且大于8000 别名"薪资",根据薪资降序显示前2个部门的信息
SELECT department_id,MAX(salary) "薪资"   # 顺序 5
FROM employees   # 顺序 1
WHERE department_id IN (10,20,30,40,50)  # 顺序 2
GROUP BY department_id  # 顺序 3
HAVING MAX(salary) > 8000  # 顺序 4
ORDER BY MAX(salary) DESC  # 顺序 5
LIMIT 0,2; # 顺序 5

11.4 解释之前遗留问题

# 查询10,20,30,40号部门中最高薪资并且大于10000
# 写法一
SELECT department_id,MAX(salary)
FROM employees 
WHERE department_id IN(10,20,30,40)
GROUP BY department_id
HAVING MAX(salary) > 10000;

# 写法二 (不推荐,效率低)
SELECT department_id,MAX(salary)
FROM employees 
GROUP BY department_id
HAVING MAX(salary) > 10000 AND department_id IN(10,20,30,40);

为什么写法二的效率低?
根据上述语句的执行顺序,GROUP BY分组后,HAVING对分组后的每个部门进行条件筛选,接着AND只要10-40号部门,那么其他部门不就白计算了,导致效率低下

写法一, 先进行WHERE筛选出需要的部门,在对这些部门进行分组,最后HAVING再去筛选,所需要计算的数据量小,并且不会浪费

根据执行顺序也可以解释为什么SELECT语句中取别名,WHERE语句中使用不了,而ORDER BY 中可以使用, 因为WHERE比SELECT先执行,所以SELECT去别名看不见,同理ORDER BY 可以使用.

FROM ==> WHERE ==> GROUP BY ==> HAVING ==> SELECT ==> DISTINCT ==> ORDER BY ==> LIMIT

总结

以上就是今天要讲的内容,希望对大家有所帮助!!!

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

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

相关文章

STM32G431—ADC+E2PROM读写实验

目录 1.ADC介绍 配置cubemx 代码 2.IIC 通信 原理图 AT24C02 代码 i2C.c 主函数 1.ADC介绍 ADC 有多达 18 个转换通道,其中通道 0~通道 15 是外部通道,使用的 GPIO 引脚如表 所示。 ADC引脚GPIO引脚GPIO配置ADC引脚GPIO引脚GPIO配置IN0PA0模拟输…

Aspose.PDF for .NET提取矢量图像的支持

Aspose.PDF for .NET提取矢量图像的支持 增加了对提取矢量图像的支持。 改进了PDF到Microsoft Excel的转换。 添加了对创建“PrinterMark”批注的支持。 增加了检测PDF文件是否包含矢量图形的功能。 Aspose.PDF for.NET是一个高级PDF处理和解析API,用于在跨平台应用…

Linux常用命令——setsid命令

在线Linux命令查询工具(http://www.lzltool.com/LinuxCommand) setsid 在新的会话中运行程序。 补充说明 setsid命令子进程从父进程继承了:SessionID、进程组ID和打开的终端。子进程如果要脱离这些,代码中可通过调用setsid来实现。,而命令…

C#中的基本概念(类_对象_属性_方法)

C#中的基本概念(类_对象_属性_方法) 对象的概念: 任何存在的实体都是对象,对象是真实存在的, 它包括“静态特征”和“动态特征” 对象包含2个方面: 静态特征:表示对象的属性,用来存储对象本身的数据 动态特征(行为):表示对象的方法,用来说明对象能做什么 例如: 一…

云服务器部署Node.js前后端分离项目

云服务器部署Node.js 前后端分离项目 准备工作 1.拥有一台服务器 自行选择阿里云,腾讯云… 2.重装系统 以腾讯云为例,安装centos 7.6系统 重置一下密码 3.使用远程管理工具 以宝塔工具为例,添加连接 4.安装宝塔面板 宝塔面板 - 简单好用的Linux…

基于ImageAI的图像识别

博主简介 博主是一名大二学生,主攻人工智能研究。感谢让我们在CSDN相遇,博主致力于在这里分享关于人工智能,c,Python,爬虫等方面知识的分享。 如果有需要的小伙伴可以关注博主,博主会继续更新的&#xff0c…

每日学术速递1.25

CV - 计算机视觉 今天带来的是北航IRIP实验室被国际计算机视觉与模式识别会议CVPR 2022接收的6篇论文。 CVPR是由IEEE主办的计算机视觉、模式识别及人工智能等领域最具影响力和最重要的国际顶级会议。CVPR官网显示,此次会议有超过8161篇的大会论文投稿,…

测试篇(三):测试用例的万能公式、对水杯和登录页面设计测试用例、测试用例的设计方法

目录一、测试用例的万能公式二、对登录页面设计测试用例三、测试用例的设计方法3.1 基于需求的设计方法3.2 等价类3.3 边界值3.4 判定表3.5 正交排列3.6 场景设计法3.7 错误猜测法四、面试真题一、测试用例的万能公式 首先,为"水杯"设计一个测试用例&…

计算机网络基础(二)

文章目录1. 应用层1.1 定制应用层协议1.2 网络版计算器实现1.3 应用层细分1.4 HTTP协议1.4.1 认识网址(URL)1.4.2 HTTP协议简易了解1.4.3 简易版HTTP服务器1.4.4 HTTP请求报文详解1.4.5 响应报文1.4.6 HTTP的一些安全问题1.5 HTTPS协议1.5.1 HTTPS和SSL/TLS1.5.2 短链接和长链接…

【Java|golang】1802. 有界数组中指定下标处的最大值---双指针

给你三个正整数 n、index 和 maxSum 。你需要构造一个同时满足下述所有条件的数组 nums&#xff08;下标 从 0 开始 计数&#xff09;&#xff1a; nums.length n nums[i] 是 正整数 &#xff0c;其中 0 < i < n abs(nums[i] - nums[i1]) < 1 &#xff0c;其中 0 &l…

2023年最新Python常见编程面试题(1)精选30个题目附答案

2023年最新Python面试题&#xff08;1&#xff09;之基础篇精选1.统计字符串中字符出现的次数2.获取字典key值键中小写字母对应键值对3.将字典中key变小写4.更改字典value值5.将cookies变成字典形式6.有如下字符串username把它转换成为UserName7.分别求出奇数和偶数把奇数偶数存…

NLP | 打造一个‘OpenAI智能’机器人,只需要五分钟

借用openai api,做一个聊天机器人&#xff0c;别去openai主页啦~Step 1.登录OpenAI账号网站&#xff1a;Overview - OpenAI APIStep 2.生成API key点击右上角的个人个人账户-> 点击 View API keys点击生成一个秘钥&#xff08;Create new secret key&#xff09;,并且复制St…

GameFrameWork框架(Unity3D)使用笔记(九) AssetBundle和游戏打包

目录 前言&#xff1a; 整个流程&#xff1a; 一、配置路径 二、打包 三、初始化资源 四、测试打包 前言&#xff1a; 如果使用了GameFrameWork框架的话&#xff0c;你会发现你点击Build And Run按钮打包运行大概是运行不起来的。本篇就讲了怎么打包游戏运行。 我觉得我对…

什么是YOLOR?

简述YOLOR 是一种用于对象检测的最先进的机器学习算法&#xff0c;与 YOLOv1-YOLOv5 不同&#xff0c;原因在于作者身份、架构和模型基础设施的差异。YOLOR 代表“你只学习一种表示”&#xff0c;不要与 YOLO 版本 1 到 4 混淆&#xff0c;其中 YOLO 代表“你只看一次”。 YOLO…

Docker的常用命令

文章目录 目录 文章目录 前言 一、帮助命令 二、镜像命令 1.查看镜像 2.搜索镜像 3.下载镜像 4.删除镜像 三、容器命令 1.启动容器 2.查看容器 3.退出容器 4.删除容器 5.启动和停止容器 四、常用的其它命令 后台运行 查看日志 查看容器中进程的信息 查看镜像的元数据…

lego-loam学习笔记(一)

前言&#xff1a; 主要记录配置编译lego-loam源码时遇到的问题和解决的方法。 系统&#xff1a;ubuntu18.04 一、安装gtsam 因为系统是18.04所以不需要作很大的更改&#xff0c;按照官网的doc一步一步的来就行了。 根据官网&#xff1a; GitHub - RobustFieldAutonomyLab…

DlhSoft Gantt Chart Light Library自定义的网格列

DlhSoft Gantt Chart Light Library自定义的网格列 Improved the loading of Microsoft Project XML files and the exporting of images from ScheduleChartDataGrid.Added new TotalResourceEffort and TotalResourceCompletedEffort properties to compute the real effort …

MySQL数据库数据动态监控(canal+Kafka)

参考资料: 参考文章https://gper.club/articles/7e7e7f7ff3g59gc6g6d canal官网 https://github.com/alibaba/canal

JavaWeb项目中添加live2d模型

前言&#xff1a;之前个人博客中配置的live2d模型的API失效了&#xff0c;所以重新折腾了一下&#xff0c;在自己服务器配置了 live2d 的 API&#xff0c;在此记录一下 JavaWeb项目中添加live2d模型 之前在个人博客中使用的 live2d 模型一直用的是网上一个大佬免费提供的 API …

Mybatis 的中高级特性使用

简介&#xff1a; MyBatis 的真正强大在于它的语句映射&#xff0c;这是它的魔力所在。由于它的异常强大&#xff0c;映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比&#xff0c;你会立即发现省掉了将近 95% 的代码。MyBatis 致力于减少使用成…