SQL---公共表表達式(CTEs)


公共表表達式(CTEs)是一個命名的臨時結果集。CTE不作為對象存儲,僅在查詢執行期間持續。

 

有時我們在處理一些復雜查詢的時候,需要把查詢內容一步步分解,最后計算出想要的結果。因此我們需要保存這些中間數據,但是計算出最后結果之后這些數據就沒用了,因此我們需要把這些中間計算過程保存在一個臨時的結果集里。

 

語法:

WITH cte_name AS (
    query
);

注:CTE后面也可以跟其他的CTE,但只能使用一個with,多個CTE中間用逗號(,)分隔。

 

例子:

在合並兩張表之前先進行篩選,盡可能刪減掉不需要的行,只保留需要的行,這樣編寫出的SQL更高效。

 

以下的SQL是非常低效的,因為它先合並兩個表,之后才對“2017年1月9日”之后的時間進行篩選:

SELECT *
FROM table_a a
JOIN table_b b
ON a.username = b.username
WHERE a.day >= '2017-09-01'

 

正確的表達方式是在合並表之前使用CTEs進行篩選,如下:

WITH a AS (
     SELECT *
     FROM table_a
     WHERE day >= '2017-09-01'),

b AS (
     SELECT *
     FROM table_b
     WHERE day >= '2017-09-01');

SELECT *
FROM a
JOIN b
ON a.username=b.username;

 

CTEs會預存子查詢的結果,所以運行速度通常比子查詢要快。尤其是當某個子查詢的表被重復使用的時候,效率會顯著提升。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM