Программирование >>  Реализация целостности данных 

1 ... 36 37 38 [ 39 ] 40 41 42 ... 124


ГЛАВА 5 атаа алгебра

каждой записи. Наиболее широко используются агрегатные функции AVERAGE, COUNT, SUM, MAXIMUM и MINIMUM.

здймуаодЕ

I i --

Beverages

iChai

Beverages

:Chang

Beverages

Beverages

Chartreuseveite i.ill 1 Cate de Blaye ,

6

.V,i,.;..,-.ir,-,>..---. .ii-.T-

Beverages

1 Guarana Fatitastica .

Beverages

ipqh Coffee

Beverages

Lakkalikauri

Beverages .

Beverages

Laughing Lumberjack Lager Outback Lager

; ;, щ 817

Beverages

Rhunbrau Klaslerhiar

. 1155

Beverages iBarerages

Condiments

Sasquatch Ale Steeleye Stout Aniseed Syrup

шщ

........32S

.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

. ...L;: .

-----

......

LnDtijHld .

V-rti . .. .X -.1: . ........

tir;мгfllilt*fpзпгvгпг [ ,

.....czr

Puc. 5-10. Оператор TRANSFORM выполняет операцию поворота 90 над результатами операции агрегирования

Оператор ROLLUP

Операция агрегирования, реализованная при помощи оператора GROuP by, генерирует записи, которые содержат агрегированные данные. Оператор rOlLUP - это логическое расширение операции



1 ... 36 37 38 [ 39 ] 40 41 42 ... 124

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика