首页 > 数据库 >MySQL Select 语句执行顺序

MySQL Select 语句执行顺序

时间:2023-11-20 17:13:36浏览次数:33  
标签:语句 JOIN 子句 生成 VT MySQL ORDER Select LEFT

一条 SQL 查询语句结构如下:

SELECT 
DISTINCT <select_list>
FROM <left_table> <join_type> JOIN <right_table> ON <join_condition>
WHERE <where_condition>
GROUP BY <group_by_list>
HAVING <having_condition>
ORDER BY <order_by_condition>
LIMIT <limit_number>

但真正的执行步骤如下,执行时,每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入:

1. FROM

在这一步,无论后面跟那种联接运算(LEFT JOIN、RIGHT JOIN等),都首先执行交叉联接(CROSS JOIN),计算笛卡尔积,生成虚拟表 VT-1

2. ON

根据 ON 的筛选条件对 VT-1 进行筛选,生成 VT-2

3. JOIN

如果指定了OUTER JOIN(如 LEFT JOIN、RIGHT JOIN),将上一步没有匹配的行添加到 VT-2,生成 VT-3。例如 LEFT JOIN 会将左表的剩余数据添加到 VT-2 中

如果 FROM 子句包含两个以上表,则这一步最后生成的虚表 VT-3 和 FROM 子句的下一个表重复依次执行前述三个步骤,直到处理完所有的表为止

4. WHERE

根据条件对 VT-3 进行筛选,条件成立的行插入 VT-4

5. GROUP BY

按照指定的列名对 VT-4 的行进行分组,生成VT-5,最后每个分组只有一行

6. HAVING

使用聚合函数对 VT-5 的分组进行筛选,生成 VT-6

7. SELECT

投影获取指定的列,如有表达式则计算,生成 VT-7

8. DISTINCT

数据除重,生成 VT-8

9. ORDER BY

根据 ORDER BY 子句中指定的列排序,生成 VT-9

10. LIMIT

取出指定行的记录,产生 VT-10,并返回给查询用户

标签:语句,JOIN,子句,生成,VT,MySQL,ORDER,Select,LEFT
From: https://www.cnblogs.com/Yee-Q/p/17844364.html

相关文章

  • idea连接mysql数据库
    关于配置环境的崩溃心理历程:(我哭)跟着黑马连接本地数据库的时候,测试连接显示不成功启动命令行,在命令行输入:mysql-uroot-p****最后给我返回的是:ERROR2003(HY000):Can'tconnecttoMySQLserveron'localhost:3306'(10061)  问了gpt,现在来看他给出的回答是正确的,......
  • MySQL安装
    注:下面的操作都是Windows下进行下载地址:https://dev.mysql.com/downloads/mysql/1.官网下载2、针对操作系统的不同下载不同的版本 3.解压4.添加环境变量在文件夹中找到mysql.exe文件复制路径到path中5.初始化mysqld--initialize-insecure6.启动sql服务mysqld......
  • Centos7 安装MySQL详细步骤
    1.1MySQL安装1.1.1下载wget命令yum-yinstallwget1.1.2在线下载mysql安装包wgethttps://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm1.1.3安装MySQLrpm-ivhmysql57-community-release-el7-8.noarch.rpm1.1.4安装mysql服务首先进入cd/et......
  • MySQL事务
    事务的基础知识1.数据库事务概述事务是数据库区别于文件系统的重要特性之一,当我们有了事务就会让数据库中的数据始终保持一致性,同时我们还能通过事务的机制恢复到某个时间地点的数据,这样可以保证已提交到数据库的修改不会因为系统崩溃而丢失。1.1存储引擎的支持情况查询当......
  • SQL DDL语句
    DataDefinationLanguage,数据定义语言。这类SQL语句用于定义或修改数据库结构。主要的DDL操作包括CREATE(创建新表或数据库)、ALTER(修改现有数据库对象的结构)和DROP(删除表、视图或其他数据库对象)。表操作创建表CREATETABLE创建数据表的时候,不但需要指定表名字和列名,还需......
  • MySQL和Oracle 对比
    MySQL和Oracle是两种常见的关系型数据库管理系统(RDBMS),它们在功能、性能和适用场景等方面有一些区别。以下是MySQL和Oracle之间的一些比较:开源vs.商业:MySQL是一种开源数据库,可以免费使用,而Oracle是一种商业数据库,需要购买许可证才能使用。这使得MySQL在初创公司和小型项目中更......
  • MySQL最大连接数
    MySQL最大连接数MySQL最大连接数通常MySQL的最大连接数默认是151最大可以达到16384。查看mysql最大连接数:showvariableslike'%max_connections%’;查看当前实际最大使用连接数:showglobalstatuslike'Max_used_connections';实际连接数是最大连接数的85%较为合......
  • GreatSQL社区与Amazon、Facebook、Tencent共同被MySQL致谢
    一、来自MySQL官方的感谢在2023-10-25MySQL官方发布的8.2版本ReleaseNotes中,GreatSQL社区核心开发者RichardDang和HaoLu,分别收到了来自MySQL官方的贡献感谢,与Amazon、Facebook(Meta)、Tencent等一并出现在感谢清单中。详见:MySQL8.2ReleaseNotes/Chang......
  • SQL DML语句
    DataManipulationLanguage数据操纵语言,用于数据的增加、删除、更新等操作。包括INSERT(向表中插入新数据)、UPDATE(修改表中的数据)和DELETE(从表中删除数据)。插入数据INSERT插入一行数据插入数据的时候,不指定列名直接使用VALUES指定数据,表示为表中的每一列提供一个值,值的顺......
  • LNMP一键安装包安装的mysql远程连接不上的问题
    正常的做法: 以root用户登录mysql:grant all privileges on*.* to创建的用户名@"%"identified by "密码";flushprivileges;例如:mysql>grant all privileges on*.* tozhangsan@"%"identified by "123456";......