Entity SQL-Kurzreferenz
Dieses Thema enthält eine Kurzübersicht zu Entity SQL-Abfragen. Die Abfragen in diesem Thema basieren auf dem AdventureWorks Sales-Modell.
Literale
String
Es gibt Zeichenfolgenliterale, die aus Unicode-, und solche, die aus Nicht-Unicode-Zeichen bestehen. Unicode-Zeichenfolgen wird ein „N“ vorangestellt, beispielsweise N'hello'
.
Im Folgenden ist ein Beispiel für ein nicht-Unicode-Zeichenfolgenliteral abgebildet:
'hello'
--same as
"hello"
Ausgabe:
Wert |
---|
hello |
Datetime
In DateTime-Literalen sind sowohl das Datum als auch die Uhrzeit erforderlich. Es gibt keine Standardwerte.
Beispiel:
DATETIME '2006-12-25 01:01:00.000'
--same as
DATETIME '2006-12-25 01:01'
Ausgabe:
Wert |
---|
12/25/2006 1:01:00 AM |
Integer
Ganzzahlige Literale können vom Typ Int32 (123), UInt32 (123U), Int64 (123L) und UInt64 (123UL) sein.
Beispiel:
--a collection of integers
{1, 2, 3}
Ausgabe:
Wert |
---|
1 |
2 |
3 |
Sonstiges
Andere von Entity SQL unterstützte Literale sind „Guid“, „Binary“, „Float/Double“, „Decimal“ und null
. NULL-Literale werden in Entity SQL als mit allen anderen Typen im konzeptionellen Modell kompatibel aufgefasst.
Typkonstruktoren
ROW
ROW erstellt einen anonymen, strukturell typisierten (Datensatz-)Wert wie im folgenden Beispiel: ROW(1 AS myNumber, 'Name' AS myName).
.
Beispiel:
SELECT VALUE row (product.ProductID AS ProductID, product.Name
AS ProductName) FROM AdventureWorksEntities.Product AS product
Ausgabe:
ProductID | Name |
---|---|
1 | Adjustable Race |
879 | All-Purpose Bike Stand |
712 | AWC Logo Cap |
... | ... |
MULTISET
MULTISET erstellt Auflistungen, z. B.:
MULTISET(1,2,2,3)
--same as
-{1,2,2,3}.
Beispiel:
SELECT VALUE product FROM AdventureWorksEntities.Product AS product WHERE product.ListPrice IN MultiSet (125, 300)
Ausgabe:
ProductID | Name | ProductNumber | … |
---|---|---|---|
842 | Touring-Panniers, Large | PA-T100 | … |
Object
Benannter Typkonstruktor erstellt (benannte) benutzerdefinierte Objekte wie person("abc", 12)
.
Beispiel:
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
Ausgabe:
SalesOrderDetailID | CarrierTrackingNumber | OrderQty | ProductID | ... |
---|---|---|---|---|
1 | 4911-403C-98 | 1 | 776 | ... |
2 | 4911-403C-98 | 3 | 777 | ... |
... | ... | ... | ... | ... |
Referenzen
REF
REF erstellt einen Verweis auf eine Entitätstypinstanz. Die folgende Abfrage gibt beispielsweise einen Verweis auf jede Order-Entität in der Orders-Entitätenmenge zurück:
SELECT REF(o) AS OrderID FROM Orders AS o
Ausgabe:
Wert |
---|
1 |
2 |
3 |
... |
Im folgenden Beispiel wird der Eigenschaftsextrahierungsoperator (.) für den Zugriff auf eine Eigenschaft einer Entität verwendet. Bei der Verwendung des Eigenschaftsextraktionsoperators wird der Verweis automatisch dereferenziert.
Beispiel:
SELECT VALUE REF(p).Name FROM
AdventureWorksEntities.Product AS p
Ausgabe:
Wert |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
... |
DEREF
DEREF dereferenziert einen Verweiswert und erstellt das Ergebnis dieser Dereferenzierung. Die folgende Abfrage erstellt beispielsweise die Order-Entitäten für jede Bestellung in der Orders-Entitätenmenge: SELECT DEREF(o2.r) FROM (SELECT REF(o) AS r FROM LOB.Orders AS o) AS o2
.
Beispiel:
SELECT VALUE DEREF(REF(p)).Name FROM
AdventureWorksEntities.Product AS p
Ausgabe:
Wert |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
... |
CREATEREF UND KEY
CREATEREF erstellt einen Verweis, der einen Schlüssel übergibt. KEY extrahiert den Schlüsselteil eines Ausdrucks mit Typverweis.
Beispiel:
SELECT VALUE Key(CreateRef(AdventureWorksEntities.Product, row(p.ProductID)))
FROM AdventureWorksEntities.Product AS p
Ausgabe:
ProductID |
---|
980 |
365 |
771 |
... |
Functions
Canonical
Der Namespace für kanonische Funktionen ist „Edm“, wie in Edm.Length("string")
. Der Namespace muss nur dann angegeben werden, wenn ein anderer Namespace importiert wurde, der eine Funktion mit dem gleichen Namen wie eine kanonische Funktion enthält. Wenn zwei Namespaces über die gleiche Funktion verfügen, sollte der Benutzer den vollständigen Namen angeben.
Beispiel:
SELECT Length(c. FirstName) AS NameLen FROM
AdventureWorksEntities.Contact AS c
WHERE c.ContactID BETWEEN 10 AND 12
Ausgabe:
NameLen |
---|
6 |
6 |
5 |
Microsoft-anbieterspezifische Funktionen
Microsoft-anbieterspezifische Funktionen befinden sich im SqlServer
-Namespace.
Beispiel:
SELECT SqlServer.LEN(c.EmailAddress) AS EmailLen FROM
AdventureWorksEntities.Contact AS c WHERE
c.ContactID BETWEEN 10 AND 12
Ausgabe:
EmailLen |
---|
27 |
27 |
26 |
Namespaces
USING gibt in einem Abfrageausdruck verwendete Namespaces an.
Beispiel:
using SqlServer; LOWER('AA');
Ausgabe:
Wert |
---|
aa |
Paging
Paging kann durch Deklarieren einer SKIP- und LIMIT-Unterklausel in der ORDER BY-Klausel erreicht werden.
Beispiel:
SELECT c.ContactID as ID, c.LastName AS Name FROM
AdventureWorks.Contact AS c ORDER BY c.ContactID SKIP 9 LIMIT 3;
Ausgabe:
id | Name |
---|---|
10 | Adina |
11 | Agcaoili |
12 | Aguilar |
Gruppierung
GROUPING BY gibt Gruppen an, in die von einem Abfrageausdruck (SELECT) zurückgegebene Objekte platziert werden sollen.
Beispiel:
SELECT VALUE name FROM AdventureWorksEntities.Product AS P
GROUP BY P.Name HAVING MAX(P.ListPrice) > 5
Ausgabe:
name |
---|
LL Mountain Seat Assembly |
ML Mountain Seat Assembly |
HL Mountain Seat Assembly |
... |
Navigation
Der Beziehungsnavigationsoperator ermöglicht die Navigation der Beziehung von einer Entität (an einem Ende) zu einer anderen Entität (am anderen Ende). NAVIGATE akzeptiert den Beziehungstyp, qualifiziert als <Namespace>.<Beziehungstypname>. „Navigate“ gibt „Ref<T>“ zurück, wenn die Kardinalität des „to“-Endes „1“ ist. Wenn die Kardinalität des „to“-Endes „n“ beträgt, wird die „Collection<Ref<T>>“ zurückgegeben.
Beispiel:
SELECT a.AddressID, (SELECT VALUE DEREF(v) FROM
NAVIGATE(a, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) AS v)
FROM AdventureWorksEntities.Address AS a
Ausgabe:
AddressID |
---|
1 |
2 |
3 |
... |
SELECT VALUE UND SELECT
SELECT VALUE
Entity SQL stellt die SELECT VALUE-Klausel bereit, um die implizite Zeilenkonstruktion zu überspringen. In einer SELECT VALUE-Klausel kann nur ein Element angegeben werden. Wenn diese Klausel verwendet wird, wird kein Zeilen-Wrapper für die Elemente in der SELECT-Klausel erstellt, und eine Auflistung der gewünschten Form kann erstellt werden, beispielsweise SELECT VALUE a
.
Beispiel:
SELECT VALUE p.Name FROM AdventureWorksEntities.Product AS p
Ausgabe:
Name |
---|
Adjustable Race |
All-Purpose Bike Stand |
AWC Logo Cap |
... |
SELECT
Entity SQL stellt auch den Zeilenkonstruktor zum Erstellen beliebiger Zeilen bereit. SELECT werden ein oder mehrere Elemente in der Projektion übergeben, und das Ergebnis ist ein Datensatz mit Feldern, z. B.: .
Beispiel:
SELECT p.Name, p.ProductID FROM AdventureWorksEntities.Product as p Ausgabe:
Name | ProductID |
---|---|
Adjustable Race | 1 |
All-Purpose Bike Stand | 879 |
AWC Logo Cap | 712 |
... | ... |
CASE EXPRESSION
Der CASE-Ausdruck wertet eine Reihe von booleschen Ausdrücken aus, um das Ergebnis zu bestimmen.
Beispiel:
CASE WHEN AVG({25,12,11}) < 100 THEN TRUE ELSE FALSE END
Ausgabe:
Wert |
---|
true |