SELECT (Transact-SQL)
SQL Server 2012 で、データベースから行を取得し、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 ] ]
[ <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 ステートメントの論理的な処理順序 (バインド順序) を示しています。 この順序によって、1 つのステップで定義されたオブジェクトが、以降のステップにおける句でいつ利用可能になるかが決まります。 たとえば、クエリ プロセッサが FROM 句で定義されているテーブルまたはビューにバインド (アクセス) できる場合、これらのオブジェクトとその列は、以降のすべてのステップで利用できます。 逆に、SELECT 句はステップ 8 にあるので、この句で定義されているすべての列の別名と派生列は、それより前の句では参照できません。 しかし、ORDER BY 句など、それより後の句では、参照することができます。 ステートメントの実際の物理的な実行は、クエリ プロセッサによって決定され、このリストでの順序とは異なる場合があることに注意してください。
FROM
ON
JOIN
WHERE
GROUP BY
WITH CUBE または WITH ROLLUP
HAVING
SELECT
DISTINCT
ORDER BY
TOP
権限
データの選択にはテーブルまたはビューに対する SELECT 権限が必要です。この権限は、スキーマに対する SELECT 権限やテーブルに対する CONTROL 権限など上位スコープから継承されます。 または db_datareader や db_owner 固定データベース ロール、もしくは sysadmin 固定サーバー ロールのメンバーシップが必要です。 SELECT INTO を使用した新しいテーブルの作成には、CREATE TABLE 権限、および新しいテーブルを所有するスキーマに対する ALTER SCHEMA 権限も必要です。