cte(common table expression) 公用表表示式,它是在單個語句的執行範圍內定義的臨時結果集,只在查詢期間有效。它可以自引用,也可在同一查詢中多次引用,實現了**段的重複利用。
cte最大的好處是提公升t-sql**的可讀性,可以更加優雅簡潔的方式實現遞迴等複雜的查詢。
cte可用於:
⒈ 建立遞迴查詢,這個應該是cte最好用的地方
⒉ 在同一語句中多次引用生成的表
3. 減少子查詢和表變數,提高執行效率
cte優點:
1. 使用 cte 可以獲得提高可讀性和輕鬆維護複雜查詢的優點。同時,cte要比表變數的效率高得多。
2. 可以用來定義乙個sql片斷,該sql片斷會被整個sql語句所用到。有的時候,是為了讓sql語句的可讀性更高些,也有可能是在union all的不同部分,作為提供資料的部分。
3. 查詢可以分為單獨塊、簡單塊、邏輯生成塊。之後,這些簡單塊可用於生成更複雜的臨時 cte,直到生成最終結果集。
下面是cte的語法:
with cte_name ( column_name [,...n] )as(cte_query_definition –- anchor member is
defined.
)
使用示例
1. 查詢臨時結果集
with cte(categoryid,categoryname,parentid,categorylevel)as (
select categoryid
,categoryname
,parentid
,categorylevel
from category(nolock)
where status = 1 and parentid = 23
)select * from cte;
2.多重cte中間用逗號,分隔。
3.可以被緊跟著的一條sql語句所使用多次,但不能被緊跟著的多條sql語句使用。
2. 建立遞迴查詢
with cte(categoryid ,categoryname,parentid,categorylevel)as (
select categoryid
,categoryname
,parentid
,categorylevel
from category(nolock)
where status= 1 and parentid in (21,22,23,25,26
) union all
select t.categoryid
,t.categoryname
,t.parentid
,t.categorylevel
from category(nolock) as t
inner join cte as c on t.parentid = c.categoryid where status= 1
)select * from cte;
3. cte結果集和資料表關聯
with cte(categoryid,categoryname,parentid,categorylevel)as (
select categoryid
,categoryname
,parentid
,categorylevel
from category(nolock)
where status = 1 and parentid = 23
)select p.productid,p.productname,c.categoryid,c.categoryname,c.categorylevel
from
product p(nolock)
inner join cte c(nolock) on p.categoryid=c.categoryid
以上三種,應該是cte表示式,最常見的用法,如果還有其他用法,非常樂意咱們一起**。
Sql CTE公用表表示式和With用法總結
cte common table expression 公用表表示式,它是在單個語句的執行範圍內定義的臨時結果集,只在查詢期間有效。它可以自引用,也可在同一查詢中多次引用,實現了 段的重複利用。cte最大的好處是提公升t sql 的可讀性,可以更加優雅簡潔的方式實現遞迴等複雜的查詢。cte可用於 建...
Sql CTE公用表表示式和With用法總結
cte common table expression 公用表表示式,它是在單個語句的執行範圍內定義的臨時結果集,只在查詢期間有效。它可以自引用,也可在同一查詢中多次引用,實現了 段的重複利用。cte最大的好處是提公升t sql 的可讀性,可以更加優雅簡潔的方式實現遞迴等複雜的查詢。cte可用於 建...
Sql CTE公用表表示式和With用法總結
cte common table expression 公用表表示式,它是在單個語句的執行範圍內定義的臨時結果集,只在查詢期間有效。它可以自引用,也可在同一查詢中多次引用,實現了 段的重複利用。cte最大的好處是提公升t sql 的可讀性,可以更加優雅簡潔的方式實現遞迴等複雜的查詢。cte可用於 建...