iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
自我挑戰組

C# 和 SQL 探索之路 - 2系列 第 21

Day 21: SQL 使用 CTE

  • 分享至 

  • xImage
  •  

大家好,前幾天的範例有使用到 CTE (Common Table Expression) ,CTE 可以用來查詢資料,做暫時性的使用。

使用方式

以下為一個 CTE 的範例,WITH 後方接表達式名稱,括號內填入需要的欄位,AS 內接入 SELECT 語法。後方接一般的 SQL 語法。

WITH Expression (Column1, Column2, ...)
AS
(
	SELECT ...
)
SQL Statement;

以之前的範例 (Day 19: SQL 計算與上一筆的差值) 為例:

WITH MonthSavingOrder (YearMonth, Saving, ID)
AS
(
	SELECT YearMonth, Saving
    	, ROW_NUMBER() OVER (ORDER BY YearMonth ASC) AS ID
	FROM MonthSaving M
)
SELECT MS.YearMonth, MS.Saving, MSO.Saving - MSO2.Saving AS Income
FROM MonthSaving MS
INNER JOIN MonthSavingOrder MSO ON MS.YearMonth = MSO.YearMonth
LEFT JOIN MonthSavingOrder MSO2 ON MSO.ID = (MSO2.ID + 1)

特性

  • 適合用於增加 SQL 程式可讀性,用在一次性的暫時性資料。
  • 如果 CTE 前面還有其它 SQL 語法,則 CTE 前方需要加一個 ; 號。
  • CTE 只能用在其後的第一組 SQL 語法,但第一組語法可以多次取用 CTE (可做為遞迴使用)。
  • 在 Store Procedure 內,CTE 仍然會每次執行都重新編譯,因此可能會有效能的問題。
  • CTE 不會儲存成資料庫物件,生命週期僅限於查詢期間。

參考資料


上一篇
Day 20: SQL 的 ROW_NUMBER() 函數
下一篇
Day 22: SQL 的鎖定 (Lock) 和死結 (Deadlock)
系列文
C# 和 SQL 探索之路 - 230
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言