SELECT 子句 (Transact-SQL)
適用於: SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Microsoft Fabric 中的 SQL 分析端點 Microsoft Fabric 中的倉儲
指定查詢所要傳回的資料行。
語法
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) 使用者自訂類型資料行名稱。
指定 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 子句中。
備註
為選取清單所含 text 或 ntext 資料行傳回的資料長度會設定為下列各項中的最小值: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)