SELECT (Transact-SQL)
データベースから行を取得し、1 つ以上のテーブルから 1 つ以上の行または列を選択できるようにします。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 ステートメントを指定できるのは、関数にとってローカルな変数に値を代入する式がステートメントの選択リストに含まれる場合だけです。
サーバー名要素として OPENDATASOURCE 関数を使用する 4 部構成の名前は、SELECT ステートメント内にテーブル名を指定できる任意の場所で、テーブル ソースとして使用できます。
リモート テーブルに関係する SELECT ステートメントには、いくつかの構文の制約が適用されます。詳細については、「分散クエリを使用する場合のガイドライン」を参照してください。
SELECT ステートメントの処理順序
SELECT ステートメントの処理順序は次のとおりです。
FROM
ON
JOIN
WHERE
GROUP BY
WITH CUBE または WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
権限
固定サーバー ロール sysadmin、固定データベース ロール db_owner と db_datareader のメンバシップと、テーブルの所有権が必要です。sysadmin、db_owner、および db_securityadmin ロールのメンバ、およびテーブル所有者は、他のユーザーに権限を譲渡できます。