首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 核心概念速查:DML 與 CTE 定義、優勢與適用場景

     編輯:關於SqlServer

DML(Data Manipulation Language,數據操縱語言)

用於查詢與修改數據的核心指令集:

  • SELECT(查詢)
  • INSERT(插入)
  • UPDATE(更新)
  • DELETE(刪除)

與 DDL(結構定義)、DCL(權限控制)並列為 SQL 三大語言分類。

CTE(Common Table Expression,公用表表達式)

單條語句執行範圍內定義的臨時結果集,類似派生表但更強大:

特性派生表CTE
存儲方式不存儲為對象不存儲為對象
生命週期僅查詢期間僅查詢期間
自引用不支援支援(遞歸)
多次引用需重複定義同一查詢中可多次引用

CTE 核心優勢

  1. 可讀性:將複雜查詢拆解為邏輯塊,逐步組合。
  2. 可維護性:每個塊獨立測試、修改,降低耦合。
  3. 遞歸查詢:唯一標準 SQL 方式實現層級遍歷(組織架構、BOM)。

適用範圍

  • 單條 SELECT/INSERT/UPDATE/DELETE/CREATE VIEW。
  • 用戶定義例程:函數、預存過程、觸發器、視圖內部。

入門範例:查詢每部門最高薪資員工

WITH DeptMaxSalary AS (
    SELECT DepartmentId, MAX(Salary) AS MaxSal
    FROM Employee
    GROUP BY DepartmentId
)
SELECT e.*
FROM Employee e
JOIN DeptMaxSalary dms ON e.DepartmentId = dms.DepartmentId 
                       AND e.Salary = dms.MaxSal;

進階提示

  • CTE 不是「物化視圖」,每次引用都會重新執行定義查詢(除非查詢優化器選擇 Spool)。
  • 超大結果集考慮改用 #TempTable 物化,配合索引提升後續 JOIN 效能。
  • 遞歸 CTE 需顯式指定 MAXRECURSION 防止無限循環。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved