前言
在Oracle數據庫中,WITH子句(也成為“子查詢因子化” 或“公共表表達式”,Common Table Expression, CTE)用于定義一個臨時命名的結果集,這個結果集可以在后續的查詢中引用。
一、基本語法
WITH sjtab AS (SELECT column1, column2FROM some_tableWHERE condition
)
SELECT * FROM sjtab;
各部分含義說明:
- WITH:
關鍵字,表示開始一個CTE定義 - sjtab:
你為這個臨時結果集指定的名稱(可以任意命名) - AS:
關鍵字,連接名稱和查詢定義 - 括號內的查詢:
定義臨時結果集的實際查詢
二、主要用途
1.提高可讀性:
將復雜查詢分解為更簡單的部分
2.避免重復子查詢:
可以多次引用同一個CTE而不需要重復編寫
3.遞歸查詢:
支持遞歸CTE,用于處理層次結構數據
示例:
WITH dept_costs AS (SELECT department_name, SUM(salary) dept_totalFROM employees e, departments dWHERE e.department_id = d.department_idGROUP BY department_name
)
SELECT * FROM dept_costs
WHERE dept_total > (SELECT AVG(dept_total) FROM dept_costs)
ORDER BY department_name;
在這個例子中,dept_costs是一個CTE,它計算了每個部門的總薪資,然后在主查詢中被引用兩次。