SELECT (Entity SQL)
クエリで返される要素を指定します。
構文
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 つの項目のみを指定でき、row ラッパーを追加しません。
topSubclause
top(expr)
の形式で、クエリから返す最初の結果数を指定する有効な式。
ORDER BY 演算子の LIMIT パラメーターにより、結果セットの最初の n 項目を選ぶこともできます。
aliasedExpr
次のような形式の式があります。
identifier
| expr
としての expr
expr
リテラルまたは式。
Remarks
FROM、GROUP BY、HAVING 句が評価された後で、SELECT 句が評価されます。 SELECT 句は、FROM 句または外側のスコープから現在スコープ内にある項目のみを参照できます。 GROUP BY 句を指定した場合、SELECT 句は GROUP BY キーの別名のみを参照できます。 FROM 句の項目への参照は、集計関数でのみ実行できます。
SELECT キーワードの後に続く 1 つまたは複数のクエリ式の一覧は、選択リスト (旧称、投影) と呼びます。 投影のより一般的な形式は、単一クエリ式です。 次の例に示すように、コレクション member1
からメンバー collection1
を選択すると、 member1
の各オブジェクトに対応するすべての collection1
値の新しいコレクションが生成されます。
SELECT collection1.member1 FROM collection1
たとえば、 customers
が、タイプ Customer
のコレクションで、このコレクションに、タイプ Name
であるプロパティ string
が含まれる場合、 Name
から customers
を選択すると、文字列のコレクションが返されます。
SELECT customers.Name FROM customers AS c
JOIN 構文 (FULL、INNER、LEFT、OUTER、ON、および RIGHT) を使用することもできます。 内部結合に対しては ON が必要ですが、クロス結合に対しては ON を使用できません。
ROW 句および VALUE SELECT 句
Entity SQL は、SELECT 句の 2 つのバリアントをサポートします。 最初のバリアント、row select は、SELECT キーワードによって識別され、このバリアントを使用して、投影する必要がある 1 つまたは複数の値を指定できます。row ラッパーは、返された値の前後に暗黙的に追加されるため、クエリ式の結果は常に、行のマルチセットになります。
row select の各クエリ式は、別名を指定する必要があります。 別名を指定しないと、Entity SQL により別名生成規則を使用して、別名の生成が試みられます。
SELECT 句のもう 1 つのバリアント、value select は SELECT VALUE キーワードによって識別されます。 このバリアントは、1 つの値のみを指定でき、row ラッパーを追加しません。
次の例に示すように、row select は常に 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