SELECT (Entity SQL)
クエリで返される要素を指定します。
SELECT [ ALL | DISTINCT ] [ topSubclause ] aliasedExpr
[{ , aliasedExpr }]
or
SELECT VALUE [ ALL | DISTINCT ] [ topSubclause ] expr
引数
- ALL
結果セットに重複を含むことを指定します。ALL は既定値です。
- DISTINCT
結果セットに一意な結果のみを含むことを指定します。
- VALUE
1 つの項目のみを指定でき、row ラッパーを追加しません。
topSubclause
top (expr) の形式で、クエリから返す最初の結果数を指定する有効な式。ORDER BY (Entity SQL) 演算子の LIMIT パラメータにより、結果セット最初の n 項目を選択することもできます。
aliasedExpr
次の形式の式。expr は、identifier | expr として示されます。
- expr
リテラルまたは式。
解説
FROM (Entity SQL)、GROUP BY (Entity SQL)、および HAVING (Entity SQL) 句が評価された後に、SELECT 句が評価されます。SELECT 句は、FROM 句または外側のスコープから現在スコープ内にある項目のみを参照できます。GROUP BY 句を指定した場合、SELECT 句は GROUP BY キーの別名のみを参照できます。FROM 句の項目への参照は、集計関数でのみ実行できます。
SELECT キーワードの後に続く 1 つまたは複数のクエリ式の一覧は、選択リスト (旧称、投影) と呼びます。投影のより一般的な形式は、単一クエリ式です。次の例に示すように、コレクション collection1
からメンバmember1
を選択すると、collection1
の各オブジェクトに対応するすべてのmember1
値の新しいコレクションが生成されます。
SELECT collection1.member1 FROM collection1
たとえば、customers
が、タイプ Customer のコレクションで、このコレクションに、タイプ string であるプロパティName
が含まれる場合、customers
からName
を選択すると、文字列のコレクションが返されます。
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, a+34 AS c
SELECT VALUE ROW(1 AS a, "abc" AS b, a+34 AS 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 結果を返すクエリの実行方法 (EntityClient)」の手順に従います。
次のクエリを引数として
ExecuteStructuralTypeQuery
メソッドに渡します。
SELECT VALUE product FROM AdventureWorksEntities.Product AS product
出力を次に示します。
ProductID: 1
Name: Adjustable Race
ProductNumber: AR-5381
MakeFlag: False
ProductID: 2
Name: Bearing Ball
ProductNumber: BA-8327
MakeFlag: False
ProductID: 3
Name: BB Ball Bearing
ProductNumber: BE-2349
MakeFlag: True
ProductID: 4
Name: Headset Ball Bearings
ProductNumber: BE-2908
MakeFlag: False
ProductID: 316
Name: Blade
ProductNumber: BL-2036
MakeFlag: True
...