海量编程文章、技术教程与实战案例

网站首页 > 技术文章 正文

Transact-SQL学习笔记18——表表达式(派生表)

yimeika 2025-06-13 11:40:51 技术文章 5 ℃

表表达式是一种虚拟的表,在物理上并不存在。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 数据库设计与开发》

Tags:

最近发表
标签列表