Sql CTE公用表表示式和With用法總結

2021-08-15 21:03:11 字數 2074 閱讀 7165

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;

注意: 1.使用cte的sql語句應緊跟在相關的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可用於 建...