Краткий справочник по Entity SQL
В этом разделе содержится краткая ссылка на запросы Entity SQL. Запросы в этом разделе основаны на модели AdventureWorks Sales.
Литералы
Строка
Существуют строковые литералы в Юникоде и не в Юникоде. Строки Юникода предопределяются N. Например, N'hello'
.
Ниже приведен пример строкового литерала не в Юникоде:
'hello'
--same as
"hello"
Выходные данные:
Значение |
---|
hello |
Дата/время
В литералах DateTime обязательными являются и часть даты, и часть времени. Значения по умолчанию отсутствуют.
Пример:
DATETIME '2006-12-25 01:01:00.000'
--same as
DATETIME '2006-12-25 01:01'
Выходные данные:
Значение |
---|
Понедельник, 25.12.06, 01:01:00 |
Целое
Целочисленные литералы могут иметь тип Int32 (123), UInt32 (123U), Int64 (123L) и UInt64 (123UL).
Пример:
--a collection of integers
{1, 2, 3}
Выходные данные:
Значение |
---|
1 |
2 |
3 |
Другие
Другие литералы, поддерживаемые Entity SQL, : Guid, Binary, Float/Double, Decimal и null
. Литералы NULL в Entity SQL считаются совместимыми с каждым другим типом в концептуальной модели.
Конструкторы типов
ROW
Row создает анонимное, структурно типизированное (запись) значение, как в: ROW(1 AS myNumber, 'Name' AS myName).
Пример:
SELECT VALUE row (product.ProductID AS ProductID, product.Name
AS ProductName) FROM AdventureWorksEntities.Product AS product
Выходные данные:
ProductID | Имя. |
---|---|
1 | Регулируемая скорость |
879 | Универсальная подставка для велосипеда |
712 | Кепка с логотипом AWC |
... | ... |
MULTISET
MultiSET создает коллекции, такие как:
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 | Имя. | ProductNumber | … |
---|---|---|---|
842 | Touring-Panniers, Large | PA-T100 | … |
Object
Именованные конструкторы типов (именованные) определяемые пользователем объекты, такие как 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 | КоличествоЗаказа | ProductID | ... |
---|---|---|---|---|
1 | 4911-403C-98 | 1 | 776 | ... |
2 | 4911-403C-98 | 3 | 777 | ... |
... | ... | ... | ... | ... |
Ссылки
REF
REF создает ссылку на экземпляр типа сущности. Например, следующий запрос возвращает ссылки на каждую сущность Order в наборе сущностей Orders:
SELECT REF(o) AS OrderID FROM Orders AS o
Выходные данные:
Значение |
---|
1 |
2 |
3 |
... |
В следующем примере оператор извлечения свойства (.) используется для доступа к свойству сущности. При использовании этого оператора автоматически выполняется разыменование ссылки.
Пример:
SELECT VALUE REF(p).Name FROM
AdventureWorksEntities.Product AS p
Выходные данные:
Значение |
---|
Регулируемая скорость |
Универсальная подставка для велосипеда |
Кепка с логотипом AWC |
... |
DEREF
DEREF разыменовывает эталонное значение и создает результат разыменования. Например, следующий запрос возвращает сущности Order для каждой из записей Order в наборе сущностей Orders: SELECT DEREF(o2.r) FROM (SELECT REF(o) AS r FROM LOB.Orders AS o) AS o2
.
Пример:
SELECT VALUE DEREF(REF(p)).Name FROM
AdventureWorksEntities.Product AS p
Выходные данные:
Значение |
---|
Регулируемая скорость |
Универсальная подставка для велосипеда |
Кепка с логотипом AWC |
... |
CREATEREF и KEY
CREATEREF создает ссылку, передаваемую ключ. КЛЮЧ извлекает ключевую часть выражения со ссылкой на тип.
Пример:
SELECT VALUE Key(CreateRef(AdventureWorksEntities.Product, row(p.ProductID)))
FROM AdventureWorksEntities.Product AS p
Выходные данные:
ProductID |
---|
980 |
365 |
771 |
... |
Функции
Canonical
Пространство имен для канонических функций — Edm, как и в Edm.Length("string")
. Если не импортировано другое пространство имен, содержащее функцию, имя которой совпадает с именем канонической функции, то указывать пространство имен не обязательно. Если два пространства имен имеют одну и ту же функцию, пользователь должен указать полное имя.
Пример:
SELECT Length(c. FirstName) AS NameLen FROM
AdventureWorksEntities.Contact AS c
WHERE c.ContactID BETWEEN 10 AND 12
Выходные данные:
NameLen |
---|
6 |
6 |
5 |
Функции поставщиков данных (Майкрософт)
Функции , относящиеся к поставщику 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 .
Пример:
SELECT c.ContactID as ID, c.LastName AS Name FROM
AdventureWorks.Contact AS c ORDER BY c.ContactID SKIP 9 LIMIT 3;
Выходные данные:
ИД | Имя. |
---|---|
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 принимает тип связи, квалифицированный как <пространство> имен.<имя> типа связи. Навигация возвращает значение Ref<T> , если кратность конца — 1. Если значение кратности конца равно n, возвращается коллекция<Ref<T>> .
Пример:
SELECT a.AddressID, (SELECT VALUE DEREF(v) FROM
NAVIGATE(a, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) AS v)
FROM AdventureWorksEntities.Address AS a
Выходные данные:
AddressID |
---|
1 |
2 |
3 |
... |
SELECT VALUE и SELECT
SELECT VALUE
Entity SQL предоставляет предложение SELECT VALUE, чтобы пропустить неявное построение строк. В предложении SELECT VALUE может быть указан только один элемент. Если такое предложение используется, оболочка строк не создается вокруг элементов в предложении SELECT, а коллекцию требуемой фигуры можно создать, например: SELECT VALUE a
Пример:
SELECT VALUE p.Name FROM AdventureWorksEntities.Product AS p
Выходные данные:
Имя. |
---|
Регулируемая скорость |
Универсальная подставка для велосипеда |
Кепка с логотипом AWC |
... |
SELECT
Entity SQL также предоставляет конструктор строк для создания произвольных строк. Предложение SELECT принимает один или несколько элементов в проекции и возвращает запись данных с полями, например: SELECT a, b, c
.
Пример:
SELECT p.Name, p.ProductID FROM AdventureWorksEntities.Product as p Output:
Имя. | ProductID |
---|---|
Регулируемая скорость | 1 |
Универсальная подставка для велосипеда | 879 |
Кепка с логотипом AWC | 712 |
... | ... |
Выражение варианта выбора
Выражение регистра вычисляет набор логических выражений для определения результата.
Пример:
CASE WHEN AVG({25,12,11}) < 100 THEN TRUE ELSE FALSE END
Выходные данные:
Значение |
---|
TRUE |