cte表示公用表表達式,是一個臨時命名結果集,始終返回結果集。它是為了簡化sql查詢,而被標準sql引入的。下面本篇文章就來帶大家認識一下cte(公用表表達式),希望對大家有所幫助。
CTE是什么?
公用表表達式(CTE)可以被認為是在單個select,INSERT,UPDATE,delete或CREATE VIEW語句的執行范圍內定義的臨時結果集。CTE類似于派生表,因為它不作為對象存儲,并且僅在查詢期間持續。與派生表不同,CTE可以是自引用的,并且可以在同一查詢中多次引用。【相關視頻教程推薦:MySQL教程】
CTE的結構
CTE由表示CTE的表達式名稱,AS關鍵字和SELECT語句組成。定義CTE后,可以在SELECT,INSERT,UPDATE或DELETE語句中像表或視圖一樣引用它。CTE也可以在CREATE VIEW語句中用作其定義SELECT語句的一部分。
CTE的基本語法結構是:
WITH?Expression_Name?[?(?ColumnName?[1,...n]?)?] AS (?CTE?query?definition?)
說明:我們可以通過在SELECT,INSERT,UPDATE,DELETE或MERGE語句之前直接添加WITH子句來定義CTE。WITH子句中可以包含一個或多個逗號分隔的CTE。
運行CTE的聲明是:
SELECT?<column_list> FROM?expression_name;</column_list>
CTE的類型
CTE有兩種類型:遞歸和非遞歸。
遞歸CTE:是引用自身的常用表表達式。
非遞歸CTE,顧名思義,不使用遞歸;他們不參考自己。
使用CTE的好處
○? 可讀性:CTE提高了可讀性。而不是將所有查詢邏輯都集中到一個大型查詢中,而是創建幾個CTE,它們將在語句的后面組合。這使您可以獲得所需的數據塊,并將它們組合在最終的SELECT中。
○??替代視圖:您可以用CTE替換視圖。如果您沒有創建視圖對象的權限,或者您不想創建一個視圖對象,因為它僅在此一個查詢中使用,這很方便。
○??遞歸:使用CTE會創建遞歸查詢,即可以調用自身的查詢。當您需要處理組織結構圖等分層數據時,這很方便。
○??限制:克服SELECT語句限制,例如引用自身(遞歸)或使用非確定性函數執行GROUP BY。
○??排名:每當你想使用排名函數,如ROW_NUMBER(),RANK(),NTILE()等。