基本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
    评论
第一部分 概觀篇 1. 微軟SQL Server的發展歷史:1989到1999 [加入我的離線書架] . Ron的故事 . Kalen的故事 . Microsoft SQL Server發行 . 發展過程中的角色 . OS/2和合作伙伴間的戰火(Friendly Fire) . 4.2版 . SQL Server For Windows NT . 成功所帶來的改變 . 合作開發的結束 . SQL95的任務 . 下一個版本 . Sphinx的秘密 . 新的未來 2. SQL Server導覽 [加入我的離線書架] . SQL Server引擎 . DBMS強制的資料完整(Data Integrity) . 交易(Transaction)處理 . 對稱(Symmetric)伺服器架構 . 安全(Security) . 高可用性(Availability) . 分散式資料處理 . 資料複製(Replication) . 系統管理 . SQL Server公用程式(Utility)與延伸部分(Extension) . 用戶端開發介面 . 總結 第二部分 架構概觀篇 3. SQL Server架構 [加入我的離線書架] . SQL Server引擎 . 記憶體管理 . 交易日誌記錄(Transaction Logging)與回復(Recovery) . SQL Server核心(Kernel)以及與作業系統的互動(Interaction) . 總結 第三部分 使用Microsoft的SQL Server 4. 規劃及安裝SQL Server [加入我的離線書架] . SQL Server的版本 . 硬體指引 . 硬體元件 . 作業系統 . 檔案系統 . 安全性與使用者身份(Context) . 授 權 . 網路協定 . 字元集與排序順序 . 安裝SQL Server . 安裝後的基本組態 . 遠端與不在場安裝 . 總結 5. 資料庫與資料庫檔案 [加入我的離線書架] . 特殊系統資料庫 . 資料庫檔案 . 建立資料庫 . 擴增(Expand)與縮減(Shrink)資料庫 . 修改交易日誌(log)檔案大小 . 資料庫檔案群組(Filegroups) . 修改資料庫 . 資料庫的內部 . 資料庫選項 . 其他資料庫考量 . 總結 6. 表格(Table) [加入我的離線書架] . 建立表格 . 內部儲存體-細節 . 索 引 . 使用者自訂型態 . Identity屬性 . 限制(Constraints) . 修改表格 . 暫存表格 . 總結 7. 查詢資料 [加入我的離線書架] . 查詢(SELECT)敘述 . NULL的處理 . 子查詢(Subquery) . 檢視表和導出表格(Views and Derived Tables) . 其它的搜尋運算子 . 總結 8. 修改資料 [加入我的離線書架] . 基本的修改動作 . 內部資料修改 . 總結 9. Transact-SQL程式設計 [加入我的離線書架] . 將Transact-SQL當作程式語言 . Transact-SQL程式設計構詞兒─基礎 . 總結 10. 批次、交易、預儲程序與觸發 [加入我的離線書架] . 批次(Batch) . 交易(Transaction) . 預儲程序 . 執行批次或預儲程序預儲什麼? . 觸發(Trigger) . 預儲程序與觸發的除錯(Debugging) . 使用Text與Image資料 . 環境的考量 . 總 結 11. 游標(Cursor) [加入我的離線書架] . 游標基本概述 . 游標與ISAM . 游標模式 . 適當的使用游標 . 使用Transact-SQL游標 . 游標變數 . 總結 12. Transact-SQL範例與難題 [加入我的離線書架] . 使用觸發器(Trigger)來實作參考動作(Referential Actions) . 難題(Brainteaser) . 總結 13. 鎖 定 [加入我的離線書架] . 鎖定管理員(Lock Manager) . 使用者資料的鎖定型別 . 鎖定相容性 . 結合連線(Bound Connection) . 列階層與分頁階層鎖定 . 鎖定提示(Hints)與追蹤旗標(Trace Flags) . 總結 第四部分 效能與調整篇 14. 查詢效能最佳化 [加入我的離線書架] . 開發小組 . 應用程式與資料庫設計 . 規劃尖峰使用量 . 了解互動系統的回應時間 . 建立原型(Prototyping)、標準效能評估 (Benchmarking) 與測試 (Testing) . 建立有用的索引 . 使用預儲程序(stored procedure)與快取機制 . 同時性(concurrency)與 一致性 (consistent) 互抵 (trade-off) . 解決阻擋(Blocking)問題 . 解決死結問題 . 分離OLTP與DSS應用程式 . 查詢最佳化 . 監控查詢效能 . 總結 15. 設定與效能監看 [加入我的離線書架] . Windows NT組態設定 . SQL Server組態設定 . 系統維護 . 監看系統行為 . 總結 建議閱讀書目 [加入我的離線書架]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

五藏

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

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

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

打赏作者

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

抵扣说明:

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

余额充值