分享方式:


SELECT 子句 (Transact-SQL)

適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Microsoft Fabric 中的 SQL 分析端點 Microsoft Fabric 中的倉儲

指定查詢所要傳回的資料行。

Transact-SQL 語法慣例

語法

SELECT [ ALL | DISTINCT ]  
[ TOP ( expression ) [ PERCENT ] [ WITH TIES ] ]   
<select_list>   
<select_list> ::=   
    {   
      *   
      | { table_name | view_name | table_alias }.*   
      | {  
          [ { table_name | view_name | table_alias }. ]  
               { column_name | $IDENTITY | $ROWGUID }   
          | udt_column_name [ { . | :: } { { property_name | field_name }   
            | method_name ( argument [ ,...n] ) } ]  
          | expression  
         }  
        [ [ AS ] column_alias ]   
      | column_alias = expression   
    } [ ,...n ]   

引數

ALL
指定結果集中可以有重複的資料列。 ALL 是預設值。

DISTINCT
指定結果集中只能有不重複的資料列 (唯一資料列)。 針對 DISTINCT 關鍵字的用途,Null 值會被視為相等。

TOP (expression ) [ PERCENT ] [ WITH TIES ]
指出只有指定的第一組資料列或資料列百分比會從查詢結果集傳回。 expression 可以是一個數字,也可以是資料列的百分比。

為了與舊版相容,支援在 SELECT 陳述式中使用不帶括弧的 TOP expression,但不建議這麼做。 如需詳細資訊,請參閱 TOP (Transact-SQL)

<select_list> 要為結果集選取的資料行。 選取清單是一系列運算式 (以逗號分隔)。 選取清單中所能指定的最大運算式數目是 4096。

*
指定應該傳回 FROM 子句中所有資料表和檢視的所有資料行。 依照 FROM 子句所指定,資料表或檢視會傳回這些資料行,且會遵照它們在資料表或檢視中的順序。

table_name | view_name | table_alias.*
將 * 的範圍限制為指定的資料表或檢視表。

column_name
這是要傳回的資料行名稱。 請限定 column_name 來防止模糊不清的參考,例如,當 FROM 子句中的兩個資料表有名稱重複的資料行時,便可能發生此情況。 例如,AdventureWorks2022 資料庫中的 SalesOrderHeader 和 SalesOrderDetail 資料表都有名稱為 ModifiedDate 的資料行。 如果在查詢中聯結兩份資料表,您可以在選取清單中,將 SalesOrderDetail 項目的修改日期指定為 SalesOrderDetail.ModifiedDate。

expression
這是一個常數、函數,或由一個或多個運算子連接之資料行名稱、常數和函數的任意組合,或子查詢。

$IDENTITY
傳回識別欄位。 如需詳細資訊,請參閱 IDENTITY (屬性) (Transact-SQL)ALTER TABLE (Transact-SQL)CREATE TABLE (Transact-SQL)

如果 FROM 子句中有多份資料表有含 IDENTITY 屬性的資料行,就必須利用特定資料表名稱來限定 $IDENTITY,例如 T1.$IDENTITY。

$ROWGUID
傳回資料列 GUID 資料行。

如果 FROM 子句中有多份資料表含有 ROWGUIDCOL 屬性,就必須利用特定資料表名稱來限定 $ROWGUID,例如 T1.$ROWGUID。

udt_column_name
這是要傳回的 Common Language Runtime (CLR) 使用者自訂類型資料行名稱。

注意

SQL Server Management Studio 會傳回以二進位表示的使用者定義型別值。 若要以字串或 XML 格式傳回使用者定義類型值,請使用 CASTCONVERT


指定 CLR 使用者自訂類型的方法、屬性或欄位。 使用 . 。 如果是靜態方法、屬性或欄位,請使用 ::。 若要叫用 CLR 使用者自訂類型的方法、屬性或欄位,您必須具有類型的 EXECUTE 權限。

property_name
這是 udt_column_name 的公用屬性。

field_name
這是 udt_column_name的公用資料成員。

method_name
這是採用一個或多個引數之 udt_column_name 的公用方法。 method_name 不可以是 mutator 方法。

下列範例會叫用稱為 Location 之類型的方法,從 point 資料表中選取定義為 Cities 類型的 Distance 資料行值:

CREATE TABLE dbo.Cities (  
     Name VARCHAR(20),  
     State VARCHAR(20),  
     Location POINT);  
GO  
DECLARE @p POINT (32, 23), @distance FLOAT;  
GO  
SELECT Location.Distance (@p)  
FROM Cities;  

column_alias
這是取代查詢結果集中之資料行名稱的替代名稱。 例如,名稱為 Quantity 的資料行,可以指定 Quantity 或 Quantity to Date 或 Qty 之類的別名。

另外,別名也用來指定運算式結果的名稱,例如:

USE AdventureWorks2022;  
GO  
SELECT AVG(UnitPrice) AS [Average Price]  
FROM Sales.SalesOrderDetail;

column_alias可用在 ORDER BY 子句中。 不過,它不能用在 WHERE、GROUP BY 或 HAVING 子句中。 如果查詢運算式是 DECLARE CURSOR 陳述式的一部分,column_alias 就不能用在 FOR UPDATE 子句中。

備註

為選取清單所含 textntext 資料行傳回的資料長度會設定為下列各項中的最小值:text資料行的實際大小、預設的 TEXTSIZE 工作階段設定,或硬式編碼應用程式限制。 若要變更工作階段傳回文字的長度,請使用 SET 陳述式。 依預設,SELECT 陳述式傳回的文字資料長度限制是 4,000 個位元組。

如果發生下列任一行為,SQL Server 資料庫引擎會引發 511 例外狀況,並回復目前執行中的陳述式:

  • SELECT 陳述式產生超出 8,060 位元組的結果資料列或中繼工作資料表資料列。

  • DELETE、INSERT 或 UPDATE 陳述式試圖處理超出 8,060 位元組的資料列。

如果 SELECT INTO 或 CREATE VIEW 陳述式所建立的資料行未指定資料行名稱,便會發生錯誤。

另請參閱

SELECT 範例 (Transact-SQL)
運算式 (Transact-SQL)
SELECT (Transact-SQL)