MySQL-关键字执行顺序

news/2024/11/21 23:57:33/

💖简介

MySQL中,SQL查询语句的执行遵循一定的逻辑顺序,即使这些关键字在SQL语句中的物理排列可能有所不同。

🌟语句顺序

(8) SELECT (9) DISTINCT<select_list>
(1) FROM <left_table>
(3) <join_type> JOIN <right_table>
(2) ON <join_condition>
(4) WHERE <where_condition>
(5) GROUP BY <group_by_list>
(6) WITH {CUBE|ROLLUP}
(7) HAVING <having_condition>
(10) ORDER BY <order_by_list>
(11) LIMIT <offset,limit_number>

✨执行顺序

  1. from

from子句中的左表<left_table>和右表<right_table>执行笛卡尔积,得到虚拟表VT1

  1. on

对前面生成的虚拟表VT1进行ON筛选,符合条件的会被记录到虚拟表VT2中。

  1. join

如果是OUT JOIN,那么将保留表中(如左表或者右表)未匹配的行作为外部行添加到虚拟表VT2中,从而产生虚拟表VT3

  1. WHERE

对步骤3产生的虚拟表VT3进行过滤,只有符合条件<where_condition>的记录才会插入新的虚拟表VT4

  1. group by

根据group by子句中的列,对步骤4的记录进行分组操作得到虚拟表VT5

  1. with {CUBE|ROLLUP}

如果指定了ROLLUP选项,将创建一个额外的记录添加到虚拟表VT5的最后,并生成虚拟表VT6

  1. HAVING

对虚拟表VT6进行 HAVING 条件过滤,只有符合的记录才会被插入到虚拟表VT7中;

  1. Select

Select中指定的列从上一步产生的虚拟表中选出,插入虚拟表VT8

  1. Distinct

如果在查询中指定了distinct子句,则会创建一张内存临时表VT9

  1. Order by

根据order by指定的列对上一步输出的虚拟表进行排列,返回新的虚拟表VT10

  1. Limit

选出指定位置开始的指定行数据,生成虚拟表VT11,并返回结果


结果


http://www.ppmy.cn/news/1548888.html

相关文章

对原jar包解压后修改原class文件后重新打包为jar

文章目录 背景三种修改方式1.POM中移除原jar中依赖的历史版本2.原jar它不使用pom依赖而是直接放在源码中再编译使用JarEditor 插件对源码进行修改(推荐)使用java-decompiler反编译后修改源码覆盖原class&#xff08;不好用-不推荐直接跳过&#xff09;提醒 参考资料-推荐阅读拓…

C# 反射与动态编程

文章目录 1.反射(Reflection)1.1 什么是反射?1.2 反射的基本操作1.2.1 获取类型信息1.2.2 获取成员信息1.3 调用成员1.4 实例化对象1.5 常见应用场景2.动态编程2.1 什么是动态编程?2.2 dynamic 关键字2.3 动态对象和 ExpandoObject2.4 动态编程的应用场景3.反射与动态编程的…

嵌入式学习-C嘎嘎-Day06

嵌入式学习-C嘎嘎-Day06 1. 什么是异常&#xff1f; 2. 抛出异常 3. 捕获异常 4. 标准异常族 5. 异常捕获技巧 5.1 捕获基类异常 5.2 多重捕获 1. 什么是异常&#xff1f; 异常是程序在运行期间产生的问题&#xff0c;即没有语法错误&#xff0c;出现的是逻辑错误&#xff0c;C…

使用MATLAB进行随机信号处理

MATLAB是一款强大的数学计算软件&#xff0c;广泛应用于工程、科学和经济等领域。其中&#xff0c;随机信号处理是MATLAB其中一个重要的应用领域。本文将探讨随机信号的基本概念、生成方法以及MATLAB中如何处理随机信号。 1.随机信号的基本概念 随机信号是指信号的大小或形状…

How to install rust in Ubuntu 24.04

How to install rust in Ubuntu 24.04 Install Install 可以采用如下命令安装rust curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh具体如下&#xff1a; lwkqwfys:~$ curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh info: downloading instal…

python基础知识(七)——写入excel

一、写入excel 写入数据到excel wb load_workbook("testcase_api_wuye.xlsx") #打开一个已经存在的excel文件 sh wb["register"] #识别某一个表单 sh.cell(row 2,column 8).value "pass" #写入数据&#xff0c;单元格的值赋值 wb.sav…

Kotlin深度面试题:协程、密封类和高阶函数

文章目录 知识回顾前言源码分析1.面试题目1&#xff1a;Kotlin中的协程与线程的区别是什么&#xff1f;如何在Android中使用协程进行异步编程&#xff1f;2.面试题目2&#xff1a;Kotlin中的扩展函数和扩展属性是什么&#xff1f;如何在Android开发中使用它们&#xff1f;3. 面…

编译安装 openssl-3.0.14

编译和安装 OpenSSL 3.0.14 的步骤如下&#xff1a; 1. 下载 OpenSSL 源码 首先&#xff0c;从 OpenSSL 的官方网站下载所需版本的源代码。你可以使用 wget 或 curl 命令来下载&#xff1a; wget https://www.openssl.org/source/openssl-3.0.14.tar.gz或者 curl -O https:…