SELECT 句 (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
結果セットに一意な行のみを含むことを指定します。NULL 値は、DISTINCT キーワードにおいて等しいと見なされます。
TOP expression [ PERCENT ] [ WITH TIES ]
クエリの結果セットから、指定された最初の行セットまたは比率 (%) に相当する行だけが返されることを示します。expression は行数または行の比率 (%) にすることができます。TOP 句は SELECT、INSERT、UPDATE、および DELETE ステートメントで使用できます。INSERT、UPDATE、および DELETE の各ステートメントで TOP を使用する場合は、expression を区切るかっこが必要です。旧バージョンとの互換性を維持するため、SELECT ステートメント内でかっこを使用しないで TOP expression を使用する方法もサポートされていますが、この方法は推奨されていません。詳細については、「TOP (Transact-SQL)」を参照してください。
- < select_list >
結果セットに選択される列です。選択リストは、コンマで区切られた一連の式です。選択リストに指定できる式の最大数は、4,096 です。
- *
FROM 句内のすべてのテーブルおよびビューの、すべての列を返すことを指定します。列は、FROM 句に指定されているテーブルまたはビューの順に、テーブルまたはビュー内に並んでいる順序で返されます。
- table_ name| view_ name| table_ alias.*
* のスコープを、指定したテーブルまたはビューに限定します。
- column_ name
返される列の名前です。FROM 句内の 2 つのテーブルに同じ名前の列がある場合などに参照先が混乱しないように、column_name を修飾します。たとえば、AdventureWorks データベース内の SalesOrderHeader テーブルおよび SalesOrderDetail テーブルの両方に ModifiedDate という名前の列があります。クエリでこれら 2 つのテーブルを結合した場合、SalesOrderDetail エントリの変更日付を選択リストで SalesOrderDetail.ModifiedDate として指定できます。
- expression
定数、関数、または列名、定数、関数を演算子で組み合わせたもの、あるいはサブクエリを指定します。
$IDENTITY
ID 列を返します。詳細については、「IDENTITY (プロパティ) (Transact-SQL)」、「ALTER TABLE (Transact-SQL)」および「CREATE TABLE (Transact-SQL)」を参照してください。FROM 句内の複数のテーブルが IDENTITY プロパティを備えた列を持つ場合は、T1.$IDENTITY などのように、$IDENTITY を指定のテーブル名で修飾する必要があります。
$ROWGUID
行 GUID 列を返します。FROM 句内の複数のテーブルが ROWGUIDCOL プロパティを持つ場合は、T1.$ROWGUID などのように、$ROWGUID を指定のテーブル名で修飾する必要があります。
udt_column_name
返される共通言語ランタイム (CLR) ユーザー定義型列の名前です。メモ : SQL Server Management Studio は、ユーザー定義型の値をバイナリ表記で返します。ユーザー定義型の値を文字列または XML 形式で返すには、CAST または CONVERT を使用します。
- { . | :: }
CLR ユーザー定義型のメソッド、プロパティ、またはフィールドを指定します。(静的ではない) インスタンス メソッド、プロパティ、またはフィールドに対しては . を使用します。静的なメソッド、プロパティ、またはフィールドに対しては :: を使用します。CLR ユーザー定義型のメソッド、プロパティ、またはフィールドを呼び出すには、その型に対する EXECUTE 権限が必要です。
- property_name
udt_column_name のパブリック プロパティを指定します。
- field_name
udt_column_name のパブリック データ メンバを指定します。
method_name
1 つ以上の引数をとる udt_column_name のパブリック メソッドを指定します。method_name をミューテータ メソッドにすることはできません。次の例では、
Distance
という名前のメソッドを呼び出すことにより、point
型として定義されているLocation
列に対する値をCities
テーブルから選択します。CREATE TABLE 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 AdventureWorks
;GO
SELECT AVG(UnitPrice) AS 'Average Price'
FROM Sales.SalesOrderDetail;
column_alias は、ORDER BY 句の中で使用できます。ただし、WHERE 句、GROUP BY 句、または HAVING 句の中では使用できません。クエリ式が DECLARE CURSOR ステートメントに含まれている場合、FOR UPDATE 句の中で column_alias を使用することはできません。
解説
SELECT ステートメント内の句の順序は重要です。オプションの句は省略できます。ただし、オプションの句を使用する場合は、適切な順序で指定する必要があります。
ユーザー定義関数に SELECT ステートメントを指定できるのは、関数にとってローカルな変数に値を代入する式がステートメントの選択リストに含まれる場合だけです。
OPTION 句はビューでは使用できません。
table 変数は、そのスコープ内では通常のテーブルのようにアクセスできるので、SELECT ステートメントの中でテーブル ソースとして使用できます。
サーバー名要素として OPENDATASOURCE 関数を使用する 4 部構成の名前は、SELECT ステートメント内にテーブル名を指定できる任意の場所で、テーブル ソースとして使用できます。
リモート テーブルに関係する SELECT ステートメントには、いくつかの構文の制約が適用されます。詳細については、「分散クエリを使用する場合のガイドライン」を参照してください。
選択リストに含まれる text または ntext 列に対して返されるデータの長さは、text 列の実際のサイズ、既定の TEXTSIZE セッションの設定値、またはハードコーディングされたアプリケーションの制限値のうちの最小値に設定されます。セッション用に、返されるテキストの長さを変更するには、SET ステートメントを使ってください。既定では、SELECT ステートメントが返すテキスト データの長さの制限は 4,000 バイトです。
次の動作のいずれかが発生した場合、SQL Server 2005 データベース エンジンでは例外 511 が発生し、現在実行中のステートメントがロールバックされます。
- SELECT ステートメントで、8,060 バイトを超える結果行または中間作業テーブル行を生成した場合
- DELETE、INSERT、または UPDATE ステートメントを、8,060 バイトを超える行で実行しようとした場合
SELECT INTO ステートメントまたは CREATE VIEW ステートメントで作成された列に列名が付いていない場合は、エラーが発生します。
ID 列の選択
既存の ID 列が新しいテーブルに選択された場合は、次の条件のいずれかが満たされている場合を除き、新しい列には IDENTITY プロパティが継承されます。
- SELECT ステートメントに、結合、GROUP BY 句、集計関数のいずれかが含まれている。
- 複数の SELECT ステートメントが UNION を使用して結合されている。
- ID 列が選択リストに 2 回以上指定されている。
- ID 列が式の一部である。
これらの条件が 1 つでも満たされている場合は、列に IDENTITY プロパティは継承されず、代わりに NOT NULL として作成されます。ID 列のルールや制限は、すべて新しいテーブルに適用されます。
旧式の外部結合
旧バージョンの SQL Server では、WHERE 句内で *= 演算子と =* 演算子を使用する外部結合の定義をサポートしています。SQL Server Version 7.0 は SQL-92 標準をサポートしています。これによって FROM 句内の結合演算子が提供されます。データベースの互換性レベルが 90 に設定されている場合、外部結合演算子 (*= と =*) はサポートされません。
WHERE、GROUP BY、および HAVING 句の処理順序
次の手順では、WHERE 句、GROUP BY 句、および HAVING 句付きの SELECT ステートメントの処理順序を示します。
- FROM 句が初期結果セットを返します。
- WHERE 句が、その検索条件に合わない行を除外します。
- GROUP BY 句が、選択された行を GROUP BY 句内の一意な値ごとに 1 つのグループに集めます。
- 選択リストに指定された集計関数では、それぞれのグループに対して集計値を計算します。
- HAVING 句が、その検索条件に合わない行をさらに除外します。
権限
固定サーバー ロール sysadmin、固定データベース ロール db_owner と db_datareader のメンバシップと、テーブルの所有権が必要です。sysadmin、db_owner、および db_securityadmin ロールのメンバ、およびテーブル所有者は、他のユーザーに権限を譲渡できます。
INTO 句を使ってパーマネント テーブルを作成する場合は、ユーザーは出力先のデータベース内での CREATE TABLE 権限を持っている必要があります。
参照
関連項目
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
CREATE TRIGGER (Transact-SQL)
CREATE VIEW (Transact-SQL)
DELETE (Transact-SQL)
EXECUTE (Transact-SQL)
式 (Transact-SQL)
FREETEXT (Transact-SQL)
FREETEXTTABLE (Transact-SQL)
INSERT (Transact-SQL)
SET TRANSACTION ISOLATION LEVEL (Transact-SQL)
table (Transact-SQL)
UNION (Transact-SQL)
UPDATE (Transact-SQL)
EXCEPT および INTERSECT (Transact-SQL)
WHERE (Transact-SQL)
その他の技術情報
フルテキスト検索クエリ
結合の基礎
サブクエリの基礎
変数とパラメータの使用 (データベース エンジン)
オブジェクト名としての識別子の使用