|
Программирование >> Реализация целостности данных
ГЛАВА 5 атаа алгебра каждой записи. Наиболее широко используются агрегатные функции AVERAGE, COUNT, SUM, MAXIMUM и MINIMUM. здймуаодЕ I i --
.S iiin(Q>i ni.i) Рис. 5-9. Оператор OUP BY возвращает агрегированные данные Агрегирование - это еще один камень преткновения , где значения Null могут доставить дополнительные неудобства. Значения участвуют в агрегированных значений - они обра- зуют группу. Однако значения игнорируются агрегатными функциями. Как правило, это единственная проблема, возникающая, если использовать поле из в качестве параметра агрегатной функции. Расширение Операции ширения (extend) позволяет задать виртуальные поля, значения которых вычисляются на основании констант, хранимых в базе данных, но не хранятся в базе данных как определенные значения, записываемые в файл БД на физическом уровне. Чтобы создать виртуальное поле, можно просто задать формулу для его вычисления в оператора SELECT, например: SELECT ce][Oty] AS ExtendedPrice FROM [Order Details]: Вычисления, на которых основываются определения виртуальных полей, могут быть как сложными, так и простыми. Как правило, они выполняются настолько быстро, что хранить значения вычисляемых полей в таблице бессмысленно. Переименование И наконец, последняя из рассматриваемых здесь дополнительных операций - переименование (rename). Операция переименования может выполняться как над набором записей из <списка наборов за- нисей>, так и над отдельными нолями из <сниска нолей>. В механизме баз данных Microsoft Jet используется следующий синтаксис для переименования набора записей: SELECT 10;1йу AS vnctujMHM.i ij/ivi. FROM <иня таблицы> AS <псевданим та6л11цы> В sgl Server кл1лчевае слова aS опуйкаётёа.: SELECT ceBflOHM4 no.np> FRO набора записей> <пс&адоним наборазап1тоей> Переименование нолей применяется, как правило, когда создается представление или выполняется самосоединение таблицы, например; SELECT Manager.Name, Employee.Name FROM Employees AS Employee INNER JOIN Employees AS Manager ON Этот синтаксис позволяет разделить на логическом уровне каждый из вариантов использования поля. Оператор TRANSFORM Оператор TRANSFORM - это одно из расширений, добавленных Microsoft конерациям реляционной алгебры. Оператор TRANSFORM выполняет операцию поворота на 90 над результатами операции агрегирования (GROUP BY). Этот оператор часто называют кросс-табличным запросом (crosstab query), он поддерживается механизмом баз данных Microsoft Jet, в SQL Server до сих нор не реализован. Вот синтаксис оператора TRANSFORM: TRANSFORM <агрегатнай функция> SELECT <ЕпиоОк полей> FROM <список на6оров .запис8й> GROUP BY <список полей оператора 6гоирВу> PIVO к стол6ца> [IN (<список знач9иий>)] Оператор TRANSFORM определяет агре- гированные данные, которые войдут в набор записей. Оператор SELECT должен содержать выражение GROUP BY, но в нем недопустимо выражение HAVING. <С11исок полей оператора СгоирЬу> может включать несколько полей. (В операторе TRANSFORM <спи- ГЛАВА ионная алгебра сок полей> mepaTopa groupby>, как правило, совпадают). Выражение PIVOT задает поля, значения которых используются в качестве заголовков столбцов. По умолчанию механизм базы данных Microsoft Jet включает столбцы в набор записей в алфавитном порядке, слева направо. Необязательное ключевое слово IN позволяет задать имена столбцов, причем столбцы будут включены в <список значений> в том порядке, в котором они были перечислены после ключевого слова IN. Сравнив результаты выполнения оператора TRANSFORM из следующего примера с результатами выполнения операции агрегирования (рис. 5-9), можно убедиться, что они практически одинаковы. TRANSFORM Count(Produots. ProductID) fProduct ID SELECT Suppliers.CompanyName FROM Suppliers INNER JOIN (Categories INNER JOIN Products CategorylD = Products. CategorylD) SupplierlD = Products.SupplierlD GROUP BY Suppliers.CompanyName PIVOT Categories. CategoryName; Результат выполнения этого оператора показан на рис. 5-10. а l[fariri &*A n i EpjL.c LttuidE ; Щ untingitiFhl j.r.L . .. ----------- .Msta GraniiTaKBlyHifrefiiiail
LnDtijHld . V-rti . .. .X -.1: . ........ tir;мгfllilt*fpзпгvгпг [ , .....czr Puc. 5-10. Оператор TRANSFORM выполняет операцию поворота 90 над результатами операции агрегирования Оператор ROLLUP Операция агрегирования, реализованная при помощи оператора GROuP by, генерирует записи, которые содержат агрегированные данные. Оператор rOlLUP - это логическое расширение операции
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |