クエリによって返される要素を指定します。
構文
SELECT [ ALL | DISTINCT ] [ topSubclause ] aliasedExpr
[{ , aliasedExpr }] FROM fromClause [ WHERE whereClause ] [ GROUP BY groupByClause [ HAVING havingClause ] ] [ ORDER BY orderByClause ]
-- or
SELECT VALUE [ ALL | DISTINCT ] [ topSubclause ] expr FROM fromClause [ WHERE whereClause ] [ GROUP BY groupByClause [ HAVING havingClause ] ] [ ORDER BY orderByClause
論争
ALL 重複が結果セットに表示されることを指定します。 ALL が既定値です。
DISTINCT: 結果セットに一意の結果のみを表示できることを指定します。
VALUE 指定できる項目は 1 つだけであり、行ラッパーには追加されません。
topSubclause
フォーム top(expr)
のクエリから返される最初の結果の数を示す任意の有効な式。
ORDER BY 演算子の LIMIT パラメーターを使用すると、結果セット内の最初の n 個の項目を選択することもできます。
aliasedExpr
形式の式:
expr
として identifier
| expr
expr
リテラルまたは式。
注釈
SELECT 句は、 FROM、 GROUP BY、 HAVING 句が評価された後に評価されます。 SELECT 句は、(FROM 句または外部スコープから) 現在スコープ内の項目のみを参照できます。 GROUP BY 句が指定されている場合、SELECT 句は GROUP BY キーのエイリアスのみを参照できます。 FROM 句項目の参照は、集計関数でのみ許可されます。
SELECT キーワードに続く 1 つ以上のクエリ式のリストは、選択リストと呼ばれ、より正式にはプロジェクションと呼ばれます。 プロジェクションの最も一般的な形式は、1 つのクエリ式です。 コレクション collection1
からメンバー member1
を選択すると、次の例に示すように、collection1
内の各オブジェクトのすべてのmember1
値の新しいコレクションが生成されます。
SELECT collection1.member1 FROM collection1
たとえば、customers
がstring
型のプロパティName
を持つCustomer
型のコレクションである場合、customers
からName
を選択すると、次の例に示すように文字列のコレクションが生成されます。
SELECT customers.Name FROM customers AS c
JOIN 構文 (FULL、INNER、LEFT、OUTER、ON、RIGHT) を使用することもできます。 内部結合には ON が必要であり、クロス結合には nto が許可されます。
行と値の選択句
Entity SQL では、SELECT 句の 2 つのバリアントがサポートされています。 最初のバリアントである行選択は SELECT キーワードによって識別され、投影する必要がある 1 つ以上の値を指定するために使用できます。返される値の周囲に行ラッパーが暗黙的に追加されるため、クエリ式の結果は常に行のマルチセットになります。
行選択の各クエリ式では、エイリアスを指定する必要があります。 エイリアスが指定されていない場合、Entity SQL はエイリアス生成ルールを使用してエイリアスの生成を試みます。
SELECT 句のもう 1 つのバリアントである値 select は、SELECT VALUE キーワードによって識別されます。 指定できる値は 1 つだけであり、行ラッパーは追加されません。
次の例に示すように、行選択は常に VALUE SELECT の観点から表現できます。
SELECT 1 AS a, "abc" AS b FROM C
SELECT VALUE ROW(1 AS a, "abc" AS b) FROM C
All 修飾子と Distinct 修飾子
Entity SQL の SELECT の両方のバリアントで、ALL 修飾子または DISTINCT 修飾子を指定できます。 DISTINCT 修飾子を指定すると、クエリ式によって生成されたコレクションから重複が除去されます (SELECT 句まで、および SELECT 句を含む)。 ALL 修飾子を指定した場合、重複除去は実行されません。ALL が既定値です。
Transact-SQL との違い
Transact-SQL とは異なり、Entity SQL では SELECT 句での * 引数の使用はサポートされていません。 代わりに、Entity SQL では、次の例に示すように、FROM 句からコレクションエイリアスを参照することで、クエリでレコード全体を射出できます。
SELECT * FROM T1, T2
前の Transact-SQL クエリ式は、Entity SQL で次のように表されます。
SELECT a1, a2 FROM T1 AS a1, T2 AS a2
例
次の Entity SQL クエリでは、SELECT 演算子を使用して、クエリによって返される要素を指定します。 このクエリは、AdventureWorks Sales Model に基づいています。 このクエリをコンパイルして実行するには、次の手順に従います。
方法 : StructuralType の結果を返すクエリを実行する手順に従います。
次のクエリを引数として
ExecuteStructuralTypeQuery
メソッドに渡します。
SELECT VALUE product FROM AdventureWorksEntities.Products
AS product WHERE product.ListPrice < @price