Entity SQL クイック リファレンス
このトピックでは、Entity SQL クエリのクイック リファレンスを提供します。このトピックのクエリでは、AdventureWorks Sales Model が使用されています。
リテラル
String
Unicode と非 Unicode の文字列リテラルがあります。非 Unicode 文字列は、N'hello'
のように、先頭に N が付きます。
Unicode 文字列リテラルの例を次に示します。
'hello'
--same as
"hello"
出力 :
値 |
---|
hello |
DateTime
DateTime リテラルでは、日付部分と時刻部分の両方が必須です。既定値はありません。
例 :
DATETIME '2006-12-25 01:01:00.000'
--same as
DATETIME '2006-12-25 01:01'
出力 :
値 |
---|
12/25/2006 1:01:00 AM |
Integer
Integer リテラルには、Int32 型と Int64 型があります。
例 :
--a collection of integers
{1, 2, 3}
出力 :
値 |
---|
1 |
2 |
3 |
その他
Entity SQL でサポートされているその他のリテラルは、Guid、Binary、Float/Double、Decimal、および null です。Entity SQL の NULL リテラルは、Entity Data Model (EDM) のその他すべての型と互換性があると見なされます。
型コンストラクタ
ROW
ROW (Entity SQL) は、ROW(1 AS myNumber, ‘Name’ AS myName).
のように、構造的に型付けされた匿名のレコード値を作成します。
例 :
SELECT VALUE row (product.ProductID as ProductID, product.Name
as ProductName) FROM AdventureWorksEntities.Product AS product
出力 :
ProductID | Name |
---|---|
1 |
Adjustable Race |
879 |
All-Purpose Bike Stand |
712 |
AWC Logo Cap |
... |
... |
MULTISET
MULTISET (Entity SQL) は、次のようなコレクションを作成します。
MULTISET(1,2,2,3)``--same as
-{1,2,2,3}.
例 :
SELECT VALUE product FROM AdventureWorksEntities.Product AS product WHERE product.ListPrice IN MultiSet (125, 300)
出力 :
ProductID | Name | ProductNumber | … |
---|---|---|---|
842 |
Touring-Panniers, Large |
PA-T100 |
… |
Object
名前付きの型コンストラクタ (Entity SQL) は、person("abc", 12)
のように、名前付きのユーザー定義オブジェクトを作成します。
例 :
SELECT VALUE AdventureWorksModel.SalesOrderDetail (o.SalesOrderDetailID, o.CarrierTrackingNumber, o.OrderQty,
o.ProductID, o.SpecialOfferID, o.UnitPrice, o.UnitPriceDiscount,
o.rowguid, o.ModifiedDate) FROM AdventureWorksEntities.SalesOrderDetail
AS o
出力 :
SalesOrderDetailID | CarrierTrackingNumber | OrderQty | ProductID |
---|---|---|---|
1 |
4911-403C-98 |
1 |
776 |
2 |
4911-403C-98 |
3 |
777 |
... |
... |
... |
... |
参照
REF
REF は、エンティティ型のインスタンスへの参照を作成します。たとえば、次のクエリは、select ref(o) from LOB.Orders as o
のように、Orders エンティティ セットの各 Order エンティティへの参照を返します。次の例では、プロパティ抽出演算子 (.) を使用して、エンティティのプロパティにアクセスします。プロパティ抽出演算子を使用すると、参照は自動的に逆参照されます。
例 :
SELECT VALUE REF(p).Name FROM
AdventureWorksEntities.Product as p
出力 :
値 |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
... |
DEREF
DEREF は参照値を逆参照し、その逆参照の結果を生成します。たとえば、次のクエリは、select deref(o2.r) from (select ref(o) as r from LOB.Orders as o) as o2
のように、Orders エンティティ セットの各 Order について Order エンティティを生成します。
例 :
SELECT VALUE DEREF(REF(p)).Name FROM
AdventureWorksEntities.Product as p
出力 :
値 |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
... |
CREATEREF と KEY
CREATEREF は、キーを渡す参照を作成します。KEY は、型参照を持つ式のキー部分を抽出します。
例 :
SELECT VALUE Key(CreateRef(AdventureWorksEntities.Product, row(p.ProductID)))
FROM AdventureWorksEntities.Product as p
出力 :
ProductID |
---|
980 |
365 |
771 |
... |
関数
正規
正規関数の名前空間は Edm で、Edm.Length("string")
のように使用されます。正規関数と同じ名前の関数を含んでいる別の名前空間がインポートされない限り、名前空間を指定する必要はありません。2 つの名前空間に同じ関数が存在する場合は、完全な名前を指定する必要があります。
例 :
SELECT Length(c. FirstName) As NameLen FROM
AdventureWorksEntities.Contact AS c
WHERE c.ContactID BETWEEN 10 AND 12
出力 :
NameLen |
---|
6 |
6 |
5 |
Microsoft プロバイダ固有
Microsoft プロバイダ固有の関数は、SqlServer 名前空間にあります。
例 :
SELECT SqlServer.LEN(c.EmailAddress) As EmailLen FROM
AdventureWorksEntities.Contact AS c WHERE
c.ContactID BETWEEN 10 AND 12
出力 :
EmailLen |
---|
27 |
27 |
26 |
名前空間
USING は、クエリ式で使用する名前空間を指定します。
例 :
using SqlServer; LOWER('AA');
出力 :
値 |
---|
aa |
ページング
ページングは、SKIP および LIMIT サブ句を ORDER BY (Entity SQL) 句に宣言することによって表現できます。
例 :
SELECT c.ContactID as ID, c.LastName as Name FROM
AdventureWorks.Contact AS c ORDER BY c.ContactID SKIP 9 LIMIT 3;
出力 :
ID | Name |
---|---|
10 |
Adina |
11 |
Agcaoili |
12 |
Aguilar |
グループ化
GROUPING BY は、クエリ (SELECT) 式によって返されるオブジェクトをグループ化するよう指定します。
例 :
SELECT VALUE name FROM AdventureWorksEntities.Product as P
GROUP BY P.Name HAVING MAX(P.ListPrice) > 5
出力 :
name |
---|
LL Mountain Seat Assembly |
ML Mountain Seat Assembly |
HL Mountain Seat Assembly |
... |
ナビゲーション
リレーションシップ ナビゲーション操作を使用すると、開始側のエンティティと終了側のエンティティ間のリレーションシップをナビゲートできます。NAVIGATE は、<名前空間>.<リレーションシップの種類の名前> という形式で修飾されたリレーションシップの種類を取得します。終了側の基数が 1 の場合、Ref<T> が返されます。終了側の基数が n の場合、Collection<Ref<T>> が返されます。
例 :
SELECT a.AddressID, (SELECT VALUE EREF(v) FROM
NAVIGATE(a, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) AS v)
FROM AdventureWorksEntities.Address AS a
出力 :
AddressID |
---|
1 |
2 |
3 |
... |
SELECT VALUE AND SELECT
SELECT VALUE
Entity SQL には、暗黙の行の構築をスキップする SELECT VALUE 句が用意されています。SELECT VALUE 句には 1 つの項目のみを指定できます。このような句を使用した場合、SELECT 句内の項目には row ラッパーは構築されず、SELECT VALUE a
などの目的の構造を持つコレクションを作成できます。
例 :
SELECT VALUE p.Name FROM AdventureWorksEntities.Product as p
出力 :
Name |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
... |
SELECT
Entity SQL には、任意の行を構築するための行コンストラクタも用意されています。SELECT は、投影内の 1 つまたは複数の要素、および SELECT a, b, c
などのフィールドを持つデータ レコードの結果を取得します。
例 :
SELECT p.Name, p.ProductID FROM AdventureWorksEntities.Product as p Output:
Name | ProductID |
---|---|
Adjustable Race |
1 |
All-Purpose Bike Stand |
879 |
AWC Logo Cap |
712 |
... |
... |
CASE 式
CASE 式は、一連のブール式を評価して結果を判定します。
例 :
CASE WHEN AVG({25,12,11}) < 100 THEN TRUE ELSE FALSE END
出力 :
値 |
---|
TRUE |