SELECT (Transact-SQL)
從資料庫中擷取資料列,可讓您從 SQL Server 2008 R2 中的一個或多個資料表選取一個或多個資料列或資料行。SELECT 陳述式的完整語法很複雜,但主要子句可摘要如下:
[ WITH <common_table_expression>]
SELECT select_list [ INTO new_table ]
[ FROM table_source ] [ WHERE search_condition ]
[ GROUP BY group_by_expression]
[ HAVING search_condition]
[ ORDER BY order_expression [ ASC | DESC ] ]
您可以在查詢之間使用 UNION、EXCEPT 和 INTERSECT 運算子來比較它們的結果,或將它們的結果結合在單一結果集中。
語法
<SELECT statement> ::=
[WITH <common_table_expression> [,...n]]
<query_expression>
[ ORDER BY { order_by_expression | column_position [ ASC | DESC ] }
[ ,...n ] ]
[ COMPUTE
{ { AVG | COUNT | MAX | MIN | SUM } (expression )} [ ,...n ]
[ BY expression [ ,...n ] ]
]
[ <FOR Clause>]
[ OPTION ( <query_hint> [ ,...n ] ) ]
<query_expression> ::=
{ <query_specification> | ( <query_expression> ) }
[ { UNION [ ALL ] | EXCEPT | INTERSECT }
<query_specification> | ( <query_expression> ) [...n ] ]
<query_specification> ::=
SELECT [ ALL | DISTINCT ]
[TOP (expression) [PERCENT] [ WITH TIES ] ]
< select_list >
[ INTO new_table ]
[ FROM { <table_source> } [ ,...n ] ]
[ WHERE <search_condition> ]
[ <GROUP BY> ]
[ HAVING < search_condition > ]
備註
由於 SELECT 陳述式非常複雜,因此,依子句來顯示詳細的語法元素和引數:
SELECT 陳述式中的子句順序很重要。您可以省略任何選擇性的子句,但當使用選擇性的子句時,它們必須以適當的順序顯示。
只有在這些 SELECT 陳述式的選取清單包含指派使用者自訂函數之本機變數值的運算式時,才能在使用者自訂函數中,允許 SELECT 陳述式。
利用 OPENDATASOURCE 函數來建構成伺服器名稱部分的四部分名稱,每當 SELECT 陳述式中出現資料表名稱時,都可用來作為資料表來源。
部分語法限制只適用於牽涉到遠端資料表的 SELECT 陳述式。如需詳細資訊,請參閱<使用分散式查詢的指導方針>。
SELECT 陳述式的邏輯處理順序
下列步驟顯示 SELECT 陳述式的邏輯處理順序或繫結順序。這個順序決定何時將某一個步驟中定義的物件提供給後續步驟的子句使用。例如,如果查詢處理器可以繫結至 (存取) FROM 子句中定義的資料表或檢視表,則這些物件及其資料行就可供所有後續步驟使用。 反之,由於 SELECT 子句是步驟 8,因此之前的子句無法參考該子句中定義的任何資料行別名或衍生資料行。不過,後續子句 (例如 ORDER BY 子句) 可以參考這些資料行別名或衍生資料行。請注意,實際執行的陳述式是由查詢處理序所決定,因此順序可能與此清單有所不同。
FROM
ON
JOIN
WHERE
GROUP BY
WITH CUBE 或 WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
權限
選取資料需要資料表或檢視表的 SELECT 權限,該權限可從較高的範圍繼承而來,例如結構描述的 SELECT 權限或資料表的 CONTROL 權限。或者需要 db_datareader 或 db_owner 固定資料庫角色或 sysadmin 固定伺服器角色的成員資格。使用 SELECTINTO 建立新的資料表也需要 CREATETABLE 權限以及擁有新資料表之結構描述的 ALTERSCHEMA 權限。