FROM Sales.Customers
WHERE country = N'USA') AS USACusts;
Результат:
Определить табличное выражение любого типа можно в запросе, отвечающем трем требованиям. 1. Порядок следования строк должен быть произвольным. Предполагается, что табличное выражение представляет собой реляционную таблицу, а у строк реляционной таблицы определенного порядка следования нет. По этой причине стандарт ANSI SQL не разрешает применять элемент order BY в запросах, определяющих табличные выражения. Язык T-SQL соблюдает это ограничение в большинстве случаев за исключением элемента тор. В запросе с необязательным элементом тор синтаксический элемент ORDER BY служит логической цели: определяет для элемента тор, какие строки выбирать. Если в запросе с элементами тор и orDER BY задается табличное выражение, элемент order by гарантированно применяется только для логического упорядочивания, необходимого элементу тор, а не как обычно для представления данных. Если во внешнем запросе к табличному выражению нет элемента orDER BY для представления результата, определенный порядок его вывода не гарантирован. 2. У всех столбцов должны быть имена. Следовательно, необходимо присвоить псевдонимы столбцов всем выражениям в списке select запроса, применяемого для задания табличного выражения. 3. Все имена столбцов должны быть уникальны. Следовательно, табличное выражение с несколькими столбцами, имеющими одно и то же имя, не корректно. Подобное может произойти, если в запросе, определяющем табличное выражение, соединяются две таблицы, и в них обоих есть столбец с одним и тем же именем. Если нужно включить оба столбца в табличное выражение, у них должны быть разные имена столбцов. Эту проблему можно решить, присвоив двум столбцам разные псевдонимы столбцов.
Одно из преимуществ использования табличных выражений — возможность ссылаться в любом синтаксическом элементе внешнего запроса на псевдонимы столбцов, присвоенные в элементе select внутреннего запроса. Это помогает обойти ограничение, запрещающее ссылаться на присвоенные в элементе select псевдонимы столбцов в элементах запроса, которые логически обрабатываются до элемента select (таких как where или group by). Предположим, что нужно написать запрос к таблице Sales.Orders (Заказы) и вернуть за все годы, указанные в датах заказов, количество разных клиентов, делавших заказы в течение каждого года. Следующий пример запроса не корректен, т. к. элемент group by ссылается на псевдоним столбца, который был присвоен в элементе select, а синтаксический элемент GROUP BY логически обрабатывается до элемента select. SELECT YEAR(orderdate) AS orderyear, COUNT(DISTINCT custid) AS numcusts FROM Sales.Orders GROUP BY orderyear;
Другая конструкция SELECT допустима, но используется две копии одного выражения (в этом случае выражение простое).
SELECT YEAR(orderdate) AS orderyear, COUNT(DISTINCT custid) AS numcusts FROM Sales.Orders GROUP BY YEAR(orderdate);
Лучше применять табличное выражение: SELECT orderyear, COUNT(DISTINCT custid) AS numcusts FROM (SELECT YEAR(orderdate) AS orderyear, custid FROM Sales.Orders) AS D GROUP BY orderyear;
В данном программном кодеопределяется таблица D, получаемая из запроса к таблицеOrders (Заказы), который возвращает год заказа и идентификатор клиента из каждой строки. В списке SELECT внутреннего запроса для присвоения в элементах group by и SELECT псевдонима столбца orderyear выражению YEAR(orderdate) используется формат внутреннего или встроенного назначения псевдонимов. Внешний запрос может ссылаться на псевдоним столбца в обоих синтаксических элементах, поскольку в своей области действия он обращается к таблице D, имеющей столбцы, названные orderyear и custid (id клиента). Следует отметить, что SQL Server раскрывает определение табличного выражения и обращается непосредственно к его базовым объектам. Если раскрыть этот запрос, то он имеет вид
SELECT YEAR(orderdate) AS orderyear, COUNT(DISTINCT custid) AS numcusts FROM Sales.Orders GROUP BY YEAR(orderdate);
В программном коде рассмотренного раньше примера используется формат встраиваемого в элемент запроса назначения выражениям псевдонимов столбцов (псевдонимы внутри вложенного запроса).
Синтаксическая запись для встраиваемого назначения псевдонимов: <выражение> [AS] <псевдоним> Хотя в этой конструкции ключевое слово AS необязательно, но оно облегчает чтение программного кода.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|