天天看點

Transact-SQL學習筆記18——表表達式(派生表)

作者:包家三少

表表達式是一種虛拟的表,在實體上并不存在。SOLServer 支援 4種表表達式:派生表公用表表達式、視圖和内聯表值函數。

派生表

派生表即為放在 FROM 後面的特殊表子查詢。它的作用是當成一張虛拟的表,再從虛拟表中查詢需要的資料

派生表需要滿足以下條件:

(1)派生表必須命名,并且派生表的每一列都必須有列名且列名唯一,對計算列或表達式列可以使用AS命名。

SELECT * FROM

(SELECT employee_id,employee_name FROM employee )

Transact-SQL學習筆記18——表表達式(派生表)

SELECT * FROM

(SELECT employee_id,employee_name FROM employee ) AS A

Transact-SQL學習筆記18——表表達式(派生表)

(2)定義派生表的語句中不能使用ORDER BY,除非使用了 TOP 關鍵字。

SELECT * FROM

(SELECT employee_id,employee_name FROM employee ORDER BY employee_id) AS A

Transact-SQL學習筆記18——表表達式(派生表)

SELECT * FROM

(SELECT TOP 3 employee_id,employee_name FROM employee ) AS A

Transact-SQL學習筆記18——表表達式(派生表)

但是使用TOP時的ORDER BY 并不能保證輸出清單的順序,此時的ORDER BY的功僅限于用來排序以便挑選滿足條件的 TOP 行,挑選完成後它的生命就結束了。如果傳回的果正好是順序的,這是因為這些記錄在實體順序上恰好是順序的,是碰巧的結果。。如果想要證按照某種順序輸出結果,則應該在外部查詢中再次使用ORDER BY子句。

SELECT * FROM

(SELECT TOP 3 employee_id,employee_name FROM employee ) AS A

ORDER BY employee_id DESC

Transact-SQL學習筆記18——表表達式(派生表)

使用派生表的一個好處就是可以在WHERE或GROUPBY子句中使用SELECT階段的名稱。按照查詢的逆輯處理順序,WHERE或GROUPBY在 SELECT階段之前執行,是以是不能使用SELECT選擇列列名的,但是使用派生表可以解決這種問題

SELECT id, name FROM

(SELECT employee_id AS id,employee_name AS name FROM employee ) AS A

WHERE id >3

Transact-SQL學習筆記18——表表達式(派生表)

學習參考資料:《跟韓老師學 SQL Server 資料庫設計與開發》

繼續閱讀