Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Общие табличные выражения




Общие табличные выражения (ОТВ, Common table expression (CTE)) — другой тип табличных выражений, очень похожих на производные таблицы, но с важными дополнительнымипреимуществами.

ОТВ были введены в SQL Server 2005 и являются частью стандарт языка ANSI SQL:1999 и более поздних версий стандартов.

ОТВ определяются с помощью инструкции with и имеют следующий синтаксис:

 

WITH < ОТВ_Имя > [(< Список_столбцов_результата >)]

AS

(

< внутренний_запрос_задающий_ОТВ >

)

< внешний_запрос_к_ОТВ >;

 

Внутренний запрос, задающий ОТВ, должен удовлетворять всем изложенным ранее требованиям для того, чтобы корректно определить табличное выражение.

Примечание: Синтаксический элемент WITH в языке T-SQL применяется для разных целей. Для того, чтобы исключить неоднозначность, если элемент WITH используется для определения ОТВ, предыдущая инструкция в том же фрагменте, если таковая существует, должна заканчиваться точкой с запятой.

 

Пример: определяется ОТВ USACusts (Клиенты из США), основанное на запросе, который возвращает всех клиентов из Соединенных Штатов, а внешний запрос выбирает из ОТВ все строки.

WITH USACusts AS

(

SELECT custid, companyname

FROM Sales.Customers

WHERE country = N'USA'

)

SELECT * FROM USACusts;

 

Результат:

ОТВ также поддерживают две формы назначения псевдонимов столбцов: встраиваемую и внешнюю.

 

Во встраиваемой форме используется конструкция

<выражение> as <псевдоним_столбца>

Пример встраиваемой формы:

WITH C AS

(

SELECT YEAR(orderdate) AS orderyear, custid

FROM Sales.Orders

)

SELECT orderyear, COUNT(DISTINCT custid) AS numcusts

FROM C

GROUP BY orderyear;

 

Во внешней форме используется список результирующих столбцов в круглых скобках, указываемых сразу после имени ОТВ.

Пример внешней формы:

WITH C(orderyear, custid) AS

(

SELECT YEAR(orderdate), custid

FROM Sales.Orders

)

SELECT orderyear, COUNT(DISTINCT custid) AS numcusts

FROM C

GROUP BY orderyear;

GO

 

В запросе, используемом для определения ОТВ, можно задавать аргументы, как и в запросах с производными таблицами.

Пример:

WITH C AS

(

SELECT YEAR(orderdate) AS orderyear, custid

FROM Sales.Orders

WHERE empid = @empid

)

SELECT orderyear, COUNT(DISTINCT custid) AS numcusts

FROM C

GROUP BY orderyear;

GO

 

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...