前言
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 10
a.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 10
a.CustomerID,
sum(b.OrderAmount) AS SumOrderAmount
FROM
Customers a
JOIN
Orders b
ON
a.CustomerID = b.CustomerID
WHERE
b.CreateDate > '2024-06-01'
GROUP BY
a.CustomerID
HAVING
sum(b.OrderAmount) > 1000
ORDER BY
SumOrderAmount 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 查询子句的执行顺序与每个子句的处理方式以及它们如何交互,可以帮助我们编写较优化的查询。如有不到之处,请多多包涵。
标签:顺序,SQL,查询,SumOrderAmount,子句,CustomerID,SELECT From: https://blog.csdn.net/Funniyuan/article/details/143270369