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

了解 SQL 查询执行顺序

前言

SQL 是一种标准化的结构化查询语言,涉及结构化查询时,高效地检索数据至关重要。SQL 在关系关系数据库交互至关重要,掌握其复杂性可以提高我们的数据查询技能。

了解SQL查询子句的执行顺序,对于编写正确高效的 SQL 语句至关重要。本文一起探讨 SQL 查询子句的典型执行顺序及了解在查询中的交互方式。

查询字句

1、FROM

FROM 子句是查询的起点,它指定要从中检索数据的表或视图。在此阶段,将处理链接、子查询和表引用。本质上此子句是为数据检索设置上下文。

FROM Customers a

2、JOIN

JOIN 子句是在FROM子句之后,根据相关列合并两个或多个表中的行,它决定了如何匹配不同表中的行。

此步骤包括各种类型的连接,如内部连接(inner join)、外部连接(left join、right join)和交叉连接(cross join)

JOIN Orders b ON a.CustomerID = b.CustomerID

3、WHERE

WHERE 子句根据指定条件筛选行。它在表联接后但在任何分组或聚合发生之前对行应用条件。此步骤对于将数据集缩小到仅相关行至关重要。

WHERE b.CreateDate >='2024-06-01'

4、GROUP BY

GROUP BY 子句将具有相同值的行分组。这通常与聚合函数(COUNT、SUM、AVG等)一起使用,以对分组数据执行计算。该子句是根据指定的列将数据组织到群组中。

GROUP BY a.CustomerID

5、HAVING

HAVING 子句与 WHERE 子句类似,根据指定的条件过滤组。但它是在分组完成后应用的。该子句可用于过滤聚合后不符合某些条件的组。

HAVING sum(b.OrderAmount)> 1000

6、SELECT

SELECT 子句指定要包含在结果集中的列或表达式。您可以在此处定义查询的输出,包括任何计算、表达式和别名。该子句确定将从查询中返回哪些数据。

SELECT TOP 10a.CustomerID,sum(b.OrderAmount) AS SumOrderAmount

7、DISTINCT

DISTINCT 关键字从结果集中删除重复的行。它在子句之后应用,以确保输出仅包含唯一行。

SELECT DISTINCT a.CustomerName

8、ORDER BY

ORDER BY 子句根据一个或多个列对结果集进行排序。应用此语句,可以将结果集按所需顺序显示。还可以根据需要指定升序或降序排序来组织数据。

ORDER BY SumOrderAmount DESC

9、LIMIT 或 TOP

LIMIT(MySQL)或 TOP(SQL Server)子句限制了查询返回的行数,并选择性地跳过指定的行数。

TOP 10

查询示例

通过下面一个查询说明其执行顺序:

SELECT TOP 10a.CustomerID,sum(b.OrderAmount) AS SumOrderAmount
FROMCustomers a
JOINOrders b
ONa.CustomerID = b.CustomerID
WHEREb.CreateDate > '2024-06-01'
GROUP BYa.CustomerID
HAVINGsum(b.OrderAmount)  > 1000
ORDER BYSumOrderAmount DESC

执行顺序按下面步步进行

1、From: 指定Customers和Orders表。

2、Join: 根据CustomerID合并Customers和Orders表。

3、Where: 筛选出以Orders表CreateDate仅包含2024-06-01日期之后的订单。

4、Group by: 按CustomerID对结果进行分组。

5、Having:筛选出仅包含具有订单金额大于1000以上的订单组。

6、SELECT:指定要包含在结果集中的列CustomerID和sum(b.OrderAmount) AS SumOrderAmount。

7、DISTINCT:示例查询语句中未使用,如果使用则在此处应用。

8、ORDER BY: 按SumOrderAmount降序(或升序)对结果进行排序。

9、LIMIT或TOP: 将结果集限制为前几行。

小结

通过了解 SQL 查询子句的执行顺序与每个子句的处理方式以及它们如何交互,可以帮助我们编写较优化的查询。如有不到之处,请多多包涵。


http://www.mrgr.cn/news/60291.html

相关文章:

  • mongodb:增删改查和特殊查询符号手册
  • 深入浅出神经网络:从基础原理到高级应用
  • 速盾:高防cdn怎么拦截恶意ip?
  • 光速写作 2.0.5 | 专注AI写作,海量素材库
  • C++ 模板编程:解锁高效编程的神秘密码
  • verilog中的function函数
  • 突破AI极限!GPT写的英语作文在全国大学生大赛中得分99!
  • 【论文阅读】jina-embeddings-v3: Multilingual Embeddings With Task LoRA
  • 代码随想录(十二)——图论
  • VLAN聚合的实验配置
  • 前端内存空间(堆、栈、队列、拷贝、垃圾回收)
  • 【React】React 18:新特性与重大更新解析
  • Redis安装说明
  • Colorful/七彩虹将星X17 Pro 22 Win11原厂OEM系统 带COLORFUL一键还原
  • 用Spring Boot打造你的网上摄影工作室
  • 《AI 大模型与深度合成技术:安全隐患与应对之策》
  • 靶向赋能 以学促战——山海关公安特邀知名警务教官徐忠宁授课培训
  • 分布式 ID 生成策略(一)
  • AI语音机器人系统的六大特色语音识别呼叫系统部署
  • 基于单片机的便携式快速干衣设备设计
  • phy自协商逻辑和原理
  • OpenCV中的坐标运算 [C#]
  • 终于有人把主数据讲透了!
  • 开发涉及的安全规范整理
  • 【AIGC】从CoT到BoT:AGI推理能力提升24%的技术变革如何驱动ChatGPT未来发展
  • pikachu靶场——垂直越权