派生表(也称为表子查询)是在外部查询的FROM子句中定义的。派生表的存在范围为定义它的外部查询,只要外部查询一结束,派生表也就不存在了。
定义派生表的查询语句要定在一对圆括号内,后面跟着AS子句和派生表的名称。
例:
SELECT *
FROM (SELECT custid FROM Customers WHERE country=N'USA') AS USACusts
要有效地定义任何类型的表表达式,查询语句必须满足三个要求:
1.不保证有一定的顺序。表表达式代表的是一个表,而关系表中的行是没有固定顺序的。(也就是说,ANSI SQL不允许在用于定义表表达式的查询语句中有ORDER BY 子句。T-SQL大体上遵守了这一限制,只有一个例外情况——当在语句中指定了TOP。在带有TOP选项的查询语句中,ORDER BY 子句的逻辑目的只有一个:为TOP 选 项定义要筛选出哪些行。)
2.所有的列必须有名称。表中的所有列必须有列名,在用于定义表表达式的查询语句中,必须为SELECT列表中的表达式起别名。
3.所有的列名必须是唯一的。表中所有的列名必须是唯一的。如果表表达式中有多个列具有相同的名称,则该表表达式是无效的。当定义表表达式的查询联接了两个表,而这两个表存在名称相同的列时,就会发生这种情况。如果确实需要在表表达式中包括这两个同名列,它们就必须具有不同的列名。为了解决这个问题,可以为这两个列起不同的列别名。