Transact-SQL 参考
SELECT 子句

指定由查询返回的列。

语法

SELECT [ ALL | DISTINCT ]
    [ TOP n [ PERCENT ] [ WITH TIES ] ]
    < select_list >

< select_list > ::=

    {    *
        | { table_name | view_name | table_alias
}.*
        |     { column_name | expression | IDENTITYCOL | ROWGUIDCOL }
            [ [ AS ] column_alias ]

        | column_alias = expression
    }    [ ,...n ]

参数

ALL

指定在结果集中可以显示重复行。ALL 是默认设置。

DISTINCT

指定在结果集中只能显示唯一行。为了 DISTINCT 关键字的用途,空值被认为相等。

TOP n [PERCENT]

指定只从查询结果集中输出前 n 行。n 是介于 0 和 4294967295 之间的整数。如果还指定了 PERCENT,则只从结果集中输出前百分之 n 行。当指定时带 PERCENT 时,n 必须是介于 0 和 100 之间的整数。

如果查询包含 ORDER BY 子句,将输出由 ORDER BY 子句排序的前 n 行(或前百分之 n 行)。如果查询没有 ORDER BY 子句,行的顺序将任意。

WITH TIES

指定从基本结果集中返回附加的行,这些行包含与出现在 TOP n (PERCENT) 行最后的 ORDER BY 列中的值相同的值。如果指定了 ORDER BY 子句,则只能指定 TOP ...WITH TIES。

< select_list >

为结果集选择的列。选择列表是以逗号分隔的一系列表达式。

*
指定在 FROM 子句内返回所有表和视图内的所有列。列按 FROM 子句所指定的由表或视图返回,并按它们在表或视图中的顺序返回。
table_name | view_name | table_alias.*
将 * 的作用域限制为指定的表或视图。
column_name
是要返回的列名。限定 column_name 以避免二义性引用,当 FROM 子句中的两个表内有包含重复名的列时会出现这种情况。例如,Northwind 数据库中的 CustomersOrders 表内都有名为 ColumnID 的列。如果在查询中联接这两个表,可以在选择列表中将客户 ID 指定为 Customers.CustomerID
expression
是列名、常量、函数以及由运算符连接的列名、常量和函数的任意组合,或者是子查询。
IDENTITYCOL
返回标识列。有关更多信息,请参见 IDENTITY(属性)ALTER TABLECREATE TABLE

如果 FROM 子句中的多个表内有包含 IDENTITY 属性的列,则必须用特定的表名(如 T1.IDENTITYCOL)限定 IDENTITYCOL。

ROWGUIDCOL
返回行全局唯一标识列。

如果在 FROM 子句中有多个表具有 ROWGUIDCOL 属性,则必须用特定的表名(如 T1.ROWGUIDCOL)限定 ROWGUIDCOL。

column_alias
是查询结果集内替换列名的可选名。例如,可以为名为 quantity 的列指定别名,如"Quantity"或"Quantity to Date"或"Qty"。

别名还可用于为表达式结果指定名称,例如:

USE Northwind
SELECT AVG(UnitPrice) AS 'Average Price'
FROM [Order Details]

column_alias 可用于 ORDER BY 子句。然而,不能用于 WHERE、GROUP BY 或 HAVING 子句。如果查询表达式是 DECLARE CURSOR 语句的一部分,则 column_alias 不能用在 FOR UPDATE 子句中。

INTO 子句

创建新表并将结果行从查询插入新表中。

用户若要执行带 INTO 子句的 SELECT 语句,必须在目的数据库内具有 CREATE TABLE 权限。SELECT...INTO 不能与 COMPUTE 子句一起使用。有关更多信息,请参见事务显式事务

通过在 WHERE 子句中包含 FALSE 条件,可以使用 SELECT...INTO 创建没有数据的相同表定义(不同表名)。

语法

[ INTO new_table ]

参数

new_table

根据选择列表中的列和 WHERE 子句选择的行,指定要创建的新表名。new_table 的格式通过对选择列表中的表达式进行取值来确定。new_table 中的列按选择列表指定的顺序创建。new_table 中的每列有与选择列表中的相应表达式相同的名称、数据类型和值。

当选择列表中包含计算列时,新表中的相应列不是计算列。新列中的值是在执行 SELECT...INTO 时计算出的。

在此次发布的 SQL Server 版本中,select into/bulkcopy 数据库选项对是否可以使用 SELECT INTO 创建永久表没有影响。对包括 SELECT INTO 在内的某些大容量操作的记录量,取决于对数据库有效的恢复模式。有关更多信息,请参见使用恢复模型

在以前发布的版本中,如果设置了 select into/bulk copy,则可用 SELECT INTO 创建永久表。

select into/bulk copy 用于向后兼容,但在以后的版本中可能不支持该选项。有关更多信息,请参考"恢复模式"和"向后兼容性"主题以及 ALTER DATABASE 主题。