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

SQL笔记(一)

SQL真正的执行顺序

SQL的语法顺序

语法顺序,即书写SQL脚本时需要遵循的顺序

  1. SELECT:指定要查询的字段或列
  2. DISTINCT:对查询结果进行去重处理(如果需要)
  3. FROM:指定要查询的数据源表
  4. JOIN 和 ON:对FROM子句中的表进行连接操作,并应用ON子句中的连接条件。
  5. WHERE:设置筛选条件,过滤掉不符合条件的记录
  6. GROUP BY:将查询结果按指定字段进行分组
  7. HAVING:对分组后的结果进行筛选(如果需要)
  8. ORDER BY:对查询结果进行排序
  9. LIMIT:对查询结果取前n行

逻辑执行顺序

逻辑执行顺序是指SQL查询语句在逻辑上被解析和执行的顺序,它反映了查询语句的结构和语义。
逻辑执行顺序通常遵循以下步骤:

  1. FROM:确定查询的数据源表,并生成一个虚拟表作为后续操作的基础。
  2. JOIN 和 ON:对FROM子句中的表进行连接操作,并应用ON子句中的连接条件。
  3. WHERE:对连接后的结果进行筛选,只保留满足WHERE条件的记录。
  4. GROUP BY:将筛选后的记录按GROUP BY子句中的字段进行分组。
  5. HAVING:对分组后的结果进行进一步筛选,只保留满足HAVING条件的分组。
  6. SELECT:选择SELECT子句中指定的字段或列,并生成最终的查询结果。
  7. DISTINCT:如果SELECT子句中包含DISTINCT关键字,则对查询结果进行去重处理。
  8. ORDER BY:对查询结果进行排序,按ORDER BY子句中的字段或列的顺序返回结果。
  9. LIMIT:对查询结果取前n行
    其实记忆的方式也很简单,相比于SQL的语法顺序,逻辑执行顺序主要是将SELECT的执行顺序靠后,放到了HAVING之后,其他的相对顺序都是没有变化的!

物理执行顺序

首先,先搞清楚【逻辑执行顺序】和【物理执行顺序】的区别:

  • 逻辑执行计划:是对查询语句的抽象表示,它描述了查询的语义和逻辑结构,如表连接、过滤条件、分组、排序等。逻辑执行计划并不涉及具体的执行细节,如数据的存储方式、数据的分区情况等。
  • 物理执行计划:则是根据逻辑执行计划和具体的执行环境(如数据的存储方式、集群的配置等)生成的,它包含了查询执行的具体细节,如数据的读取方式、数据的处理方式(如过滤、连接、排序等)以及数据的输出方式等。
    一般来说,先有逻辑执行计划,再生成具体的物理执行计划。

物理执行计划,会改变哪些SQL操作的执行顺序?
对于不同的执行引擎而言,物理执行计划是不同的,下面以SparkSQL为例进行说明。
最经典的就是:过滤条件的下推

  • 为了减少不必要的数据读取和处理量,SparkSQL会将外部的过滤条件尽可能地下推到子查询或数据源读取阶段。
  • 这种优化操作能够显著减少数据在后续处理阶段的传输和处理量,从而提高查询的执行效率。
  • 也就是将 WHERE 操作提前
http://www.jsqmd.com/news/359393/

相关文章:

  • 技术的便利,从来都不属于开发者
  • 西门子数控系统 SINUMERIK 840D sl数据高速录波的一种方法
  • C# 变量作用域
  • 【状态机DP】LeetCode 123. 买卖股票的最佳时机|||
  • 大数据可视化项目实战:从数据采集到展示
  • 《堆的 shift down》
  • 除夕夜的坚守(原创诗)
  • 一种适用于联通ZXHN G7606V6光猫的,在自带的openwrt子系统操作主系统ip6tables防火墙的方法
  • Vue.js 事件处理器
  • 集体好奇心与团队成员的心理健康
  • TypeScript String
  • Android开发工程师深度解析:技术能力与职业发展
  • 构建智能化的个人退休规划优化助手
  • AJAX 实例详解
  • 揭秘大数据领域存算分离方案
  • 燃爆!大数据OLAP在电力行业的创新应用
  • Git 核心概念:Tag 与 Branch 的本质区别
  • HarmonyOS应用开发实战(基础篇)Day01-《ArkTS基本知识》
  • 计算机字符编码
  • 量子AI在图像识别中的应用实战
  • Detached HEAD 状态详解
  • 必看!必看!提示工程架构师的多智能体系统提示协同机制指南
  • C语言编译与链接全流程:从源码到可执行程序的幕后之旅
  • [大模型实战 06] 我的模型我做主:在 Kaggle 上用 Unsloth 极速微调 Qwen3
  • 67.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--分摊功能总体设计与业务流程
  • PostgreSQL UPDATE 语句详解
  • Qt 技巧笔记(七) QLineEdit 单行输入控件
  • 【Linux进阶篇】Shell环境变量入门:全局vs局部分不清?一篇吃透配置逻辑
  • AI架构师踩过的7个数据 pipeline 坑,看完少花1个月时间!
  • Shell printf命令详解