SELECT (Transact-SQL)

從資料庫中擷取資料列,可讓您從 SQL Server 2012 中的一個或多個資料表選取一個或多個資料列或資料行。 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 運算子來比較它們的結果,或將它們的結果結合在單一結果集中。

主題連結圖示 Transact-SQL 語法慣例

語法

<SELECT statement> ::=  
    [WITH <common_table_expression> [,...n]]
    <query_expression> 
    [ ORDER BY { order_by_expression | column_position [ ASC | DESC ] } 
  [ ,...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 陳述式十分複雜,因此將會依子句顯示詳細的語法元素及引數:

WITH common_table_expression

HAVING

SELECT 子句

UNION

INTO 子句

EXCEPT 及 INTERSECT

FROM

ORDER BY

WHERE

FOR 子句

GROUP BY

OPTION 子句

子句順序對 SELECT 陳述式而言十分重要。 您可以省略任何選擇性的子句,但當使用選擇性的子句時,它們必須以適當的順序顯示。

只有在這些 SELECT 陳述式的選取清單包含指派使用者自訂函數之本機變數值的運算式時,才能在使用者自訂函數中,允許 SELECT 陳述式。

利用 OPENDATASOURCE 函數來建構成伺服器名稱部分的四部分名稱,每當 SELECT 陳述式中出現資料表名稱時,都可用來做為資料表來源。

部分語法限制只適用於牽涉到遠端資料表的 SELECT 陳述式。

SELECT 陳述式的邏輯處理順序

下列步驟顯示 SELECT 陳述式的邏輯處理順序或繫結順序。 此順序會決定在某個步驟中定義的物件提供給後續步驟之子句使用的時間。 例如,如果查詢處理器可繫結至 (存取) FROM 子句中定義的資料表或檢視表,這些物件及其資料行就會提供給所有後續步驟使用。 反之,因為 SELECT 子句是步驟 8,所以前面的子句無法參考該子句中定義的任何資料行別名或衍生資料行。 不過,ORDER BY 子句等後續子句都可以參考它們。 請注意,陳述式的實際執行方式由查詢處理器決定,其順序可能與此清單不同。

  1. FROM

  2. ON

  3. JOIN

  4. WHERE

  5. GROUP BY

  6. WITH CUBE 或 WITH ROLLUP

  7. HAVING

  8. SELECT

  9. DISTINCT

  10. ORDER BY

  11. TOP

權限

選取資料需要資料表或檢視的 SELECT 權限;此權限可從較高的範圍繼承而來,例如結構描述的 SELECT 權限或資料表的 CONTROL 權限。 或是需要 db_datareader 或 db_owner 固定資料庫角色或 sysadmin 固定伺服器角色的成員資格。 使用 SELECT INTO 建立新的資料表也需要 CREATE TABLE 權限,以及擁有新資料表之結構描述的 ALTER SCHEMA 權限。

請參閱

參考

SELECT 範例 (Transact-SQL)