Literals
“abc”
Value
abc
‘abc’
1
{2}
2
{3, 4, 5}
3
4
5
Rows
ROW(1 AS i, ‘abc’ AS s)
i
s
SELECT ROW(1 AS i, ‘abc’ AS s) AS Row
FROM {11, 12, 13};
Row
{ROW(1 AS i, ‘abc’ AS s)}
UNION ALL
{ROW(2, ‘xyz’)};
xyz
Entities
SELECT c
FROM AdventureWorks.Culture AS c
WHERE c.CultureID IN {'en', 'es', 'fr'};
c
CultureID
Name
ModifiedDate
en
English
6/1/1998 12:00:00 AM
es
Spanish
fr
French
SELECT VALUE c
AdventureWorks.Department(
CAST(100 AS Edm.Int16), 'Dyn. Dept',
'Dyn. Group', Edm.GetDate());
DepartmentID
GroupName
100
Dyn. Dept
Dyn. Group
6/20/2007 3:52:47 PM
SELECT VALUE AdventureWorks.Department(
rs.ID, rs.Name, rs.[Group], rs.[Date])
FROM
({ROW(CAST(101 AS Edm.Int16) AS ID,
'Dyn. Dept 1' AS Name,
'Dyn. Group' AS [Group],
Edm.GetDate() AS [Date])}
{ROW(CAST(102 AS Edm.Int16),
'Dyn. Dept 2', 'Dyn. Group',
Edm.GetDate())}
{ROW(CAST(103 AS Edm.Int16),
'Dyn. Dept 3', 'Dyn. Group',
) AS rs;
101
Dyn. Dept 1
6/20/2007 3:59:43 PM
102
Dyn. Dept 2
103
Dyn. Dept 3
Functions
SELECT c.ContactID,
-- Canonical:
Length(c.FirstName) AS FirstNameLength,
Edm.Length(c.LastName) AS LastNameLength,
-- Provider-specific:
SqlServer.LEN(c.EmailAddress) AS EmailAddressLength
FROM AdventureWorks.Contact AS c
WHERE c.ContactID BETWEEN 10 AND 12;
ContactID
FirstNameLength
LastNameLength
EmailAddressLength
10
6
27
11
8
12
7
26
Keys/References
SELECT VALUE KEY(c)
SELECT VALUE REF(c)
C1
0
SELECT VALUE DEREF(REF(c))
Navigation + Nesting
SELECT e.EmployeeID,
-- to 1:
e.Contact.FirstName, e.Contact.LastName,
-- to many:
(SELECT eph.RateChangeDate, eph.Rate
FROM e.EmployeePayHistory AS eph) AS
PayHistory
FROM AdventureWorks.Employee AS e
WHERE e.EmployeeID IN {4, 6};
EmployeeID
FirstName
LastName
EmployeePayHistory
Rob
Walters
RateChangeDate
Rate
1/5/1998 12:00:00 AM
8.6200
7/1/2000 12:00:00 AM
23.7200
1/15/2002 12:00:00 AM
29.8462
David
Bradley
1/20/1998 12:00:00 AM
24.0000
8/16/1999 12:00:00 AM
28.7500
6/1/2002 12:00:00 AM
37.5000
Paging/TOP
SELECT TOP(3) c.ContactID, c.FirstName, c.LastName
WHERE c.ContactID >= 10;
Ronald
Adina
Samuel
Agcaoili
James
Aguilar
SELECT c.ContactID, c.FirstName, c.LastName
ORDER BY c.ContactID
SKIP 9 LIMIT 3;
Grouping
SELECT c.FirstName, c.LastName, epc.PayChanges
(SELECT eph.EmployeeID,
Count(eph.EmployeeID) AS PayChanges
FROM AdventureWorks.EmployeePayHistory AS eph
GROUP BY eph.EmployeeID
HAVING Count(eph.EmployeeID)
>= 3) AS epc
JOIN AdventureWorks.Contact AS c
ON epc.EmployeeID = c.ContactID;
PayChanges
Humberto
Acevedo
Frances
Adams
Sean
Jacobson
Adam
Barr
Mary
Billstrom
Cornelius
Brandon
Shirley
Bruner
Megan
Burke
Stephen
Burton
Jovita
Carmody
Matthew
Cavallari
Charles
Christensen
Bart
Duncan