基本SQL算子

SQL 语句是操作数据库和数据库中数据的最常用的方法,通过SQL标准中定义的一系列的关键字,我们可以管理数据库和操作数据库中的数据。
SQL 语句的具体执行过程,可以根据 SQL语句的不同分成不同的执行步骤,每个步骤中通常都会包含一个或多个SQL算子。
本文介绍SQL语句中常见的基本SQL算子。

一、理解SQL算子

SQL算子可以理解为SQL语句执行过程中各个步骤的具体动作。

比如如下SQL语句:

SELECT
        ProductID, SUM(Amount) TotalAmount
FROM
        OrderItem i, Order o
WHERE
        i.OrderID = o.OrderID
        AND o.OrderDate >=2022-03-01Group By
        ProductID
    Having 
        SUM(Amount) > 1000
Order By 
        TotalAmount DESC, ProductID
Limit 10 ;

其中的 SELECT、SUM、FROM、WHERE、Group By、Having、Order By、Limit 都是SQL算子。

二、基本SQL算子

基本SQL算子

1、From 算子

From 算子是 SQL 语句中最基本的算子,用于定位 SQL 语句的操作对象,主要出现在 SELECT 语句中,但 DDL 语句和 DML 语句中则隐式地包含了 From 算子。

2、Scan 算子

Scan 算子是用于扫描操作的算子,作用于表和视图。Scan 算子根据扫描的执行方式可以分为 TableScan 算子和 IndexScan 算子,分别执行顺序扫描和基于索引扫描。

3、Filter 算子

顾名思义,Filter 算子是条件过滤算子,用于在 SQL 语句中根据一定的条件过程表或视图中的数据。Filter 算子中至少包含一个过滤条件,且 Filter 算子中可以包含非常复杂的过滤条件。

4、Join 算子

Join 算子是用于完成连接操作的所有算子的统称,Join 算子本身包含了连接条件。在具体的 SQL 语句中,Join 算子可以隐式表达,也可以表达为 join … on … 形式。

5、分组算子

分组算子是完成分组操作的算子,最常用的是 Group 算子和 Having 算子,还包括 Cube 算子、Rollup 算子等。
Group 算子是完成分组操作的核心算子,而 Having 算子则提供了分组筛选条件。

6、排序算子

Order 算子是 SQL 语句中用于执行排序操作的算子。排序操作是 SQL 语句中的常见操作,也是重要操作,而排序算子的具体实现,在不同的数据库中经常不同,同一种数据库中也会提供多种算法用于完成排序。

7、投影算子

投影是 SELECT 语句中的必要组成部分,表达了 SELECT 语句的输出内容的结构。投影算子可以有多种形式,甚至投影列本身就是一个独立的 SQL 语句(子查询),最常见的表现形式是表或视图中的列,此外还可以表现为 Scalar 算子、Aggregation 算子或 Window 算子。
Scalar 算子是完成标量运算的算子,都涉及到标量函数运算。
Aggregation 算子是聚合运算算子,包括 COUNT、MAX/MIN、SUM/AVG 等,通常结合分组算子出现。
Window 算子是窗口操作算子,以窗口函数形式出现。Window 算子是个复合结构,可以进一步细分为窗口函数算子、Over 算子、Partition 算子和Order 算子。

8、Value 算子

Value 算子是完成非投影部分的求值运算的算子,一般表现为标量函数,通常出现于其它多种算子的各种条件表达式中,比如出现在 Filter 算子或 Join 算子中完成过滤条件表达式或连接条件表达式的求值运算。

9、Top N 算子

Top N 算子是完成限定操作的算子的统称,限定操作指的是基于结果集并在结果集上完成某种行为的操作,Top N算子的最典型的应用场景是分页。
Top N 算子具体可以表达为 Top、Limit、Offset、RowNum 等关键字。

10、Exchange 算子

Exchange 算子是 SQL 语句执行过程中在各执行步骤之内或之间完成数据交换的算子,在并行场景或分布式场景中起作用。Exchange 算子是由数据库引擎调度的算子,其动作不能由人工参与。

三、基本SQL算子的执行顺序

SQL 语句中 SQL 算子的执行顺序与语句本身及优化器的优化结果有关。在 SQL 语句的视角上, 不同的 SQL 算子通常按下图的顺序执行:
基本SQL算子的执行顺序
在优化器的作用下,上面执行顺序可能会有变化,比如有可能会先执行 Group 算子的操作,之后再进行 Join 算子的操作。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五藏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值