表表達式是一種虛拟的表,在實體上并不存在。SOLServer 支援 4種表表達式:派生表公用表表達式、視圖和内聯表值函數。
派生表
派生表即為放在 FROM 後面的特殊表子查詢。它的作用是當成一張虛拟的表,再從虛拟表中查詢需要的資料
派生表需要滿足以下條件:
(1)派生表必須命名,并且派生表的每一列都必須有列名且列名唯一,對計算列或表達式列可以使用AS命名。
SELECT * FROM
(SELECT employee_id,employee_name FROM employee )
SELECT * FROM
(SELECT employee_id,employee_name FROM employee ) AS A
(2)定義派生表的語句中不能使用ORDER BY,除非使用了 TOP 關鍵字。
SELECT * FROM
(SELECT employee_id,employee_name FROM employee ORDER BY employee_id) AS A
SELECT * FROM
(SELECT TOP 3 employee_id,employee_name FROM employee ) AS A
但是使用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
使用派生表的一個好處就是可以在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
學習參考資料:《跟韓老師學 SQL Server 資料庫設計與開發》