Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
10_01.pdf
Скачиваний:
18
Добавлен:
11.06.2015
Размер:
182.14 Кб
Скачать

9

значения.

Функцию UN. можно присоединять к функциям CNT., SUM. и AVG.. Так, запись CNT.UN. означает количество только различающихся значений. В противоположность этому, запись CNT.ALL. будет означать количество всех значений. Очевидно, функции MAX. UN. и MAX.ALL. дадут одинаковый результат.

Пример 11. Использование функций.

Пусть требуется вывести названия отделов, в которых работает более двух сотрудников. Этот запрос можно разделить на три операции: сгруппировать сотрудников по отделам, подсчитать число сотрудников в каждом из отделов и отобрать отделы, в которых работает более двух сотрудников.

ЕМР

ФИО

ОТДЕЛ

 

ALL.

P. Toy

CONDITIONS

CNT.ALL.Employee > 2

Конструкция Toy означает операцию группирования (group-by), функция ALL.Employee формирует множество (точнее мультимножество, так как допускает дублирования) всех имен по каждому из отделов, а запись CNT.ALL.Employee > 2 обеспечивает проверку логического условия. Здесь встретилась новая операция формирования группы, которая записывается с помощью выделенного жирным шрифтом элемента примера (в оригинале – двойное подчеркивание элемента примера).

Результирующая таблица имеет вид:

ЕМР ОТДЕЛ

игрушки

косметика

Другой пример. Вывести названия отделов, в которых продаются только товары зеленого цвета.

SALES

ОТДЕЛ

ТОВАР

 

P. Toy

ALL.lnk

TYPE ТОВАР ЦВЕТ

ALL.lnk зеленый

Ответная таблица для данного запроса будет пустой.

Вычисления в запросах

С помощью запросов можно выбирать данные из таблиц и производить вычисления. Вид вычисления задается с помощью выражения в шаблоне. В выражениях, помимо обычных арифметических операций (+, -, *, /) и скобок, могут использоваться встроенные функции: AVG., CNT., MAX., MIN. и SUM..

Примеры 12. Шаблоны с вычислениями.

Пусть имеется таблица ЕМР1 с полями имени (ФИО), размером зарплаты (ЗАРПЛАТА) и размером премиальных (ПРЕМИЯ). Необходимо по каждому из сотрудников вывести имя и общую сумму зарплаты и премиальных. Для этого сформируем шаблон новой таблицы OUTPUT (заполнив строку имени таблицы и имен ее полей) и укажем в ней вид вычислений. Свяжем этот шаблон с шаблоном запроса к

10

таблице ЕМР1.

OUTPUT

ФИО

СУММА

 

 

 

P.

 

P. (s1+s2)

 

 

 

 

 

 

ЕМР

 

ФИО

ЗАРПЛАТА

ПРЕМИЯ

 

Employee

 

s1

 

s2

Поскольку операция суммирования выполняется по каждой строке исходной таблицы, такой тип вычислений можно назвать горизонтальным. Встроенные функции оперируют группами записей, поэтому можно считать, что они выполняют вертикальные вычисления.

Для подсчета общего числа сотрудников следует составить такой запрос:

ЕМР1

ФИО

ОТДЕЛ

 

Р .CNT .ALL. Em

 

Элемент примера Em здесь можно опустить.

Если требуется подсчитать число сотрудников в отделе игрушек, следует подготовить шаблон запроса вида:

ЕМР1

ФИО

ОТДЕЛ

 

Р .CNT .ALL. Em

игрушки

Чтобы подсчитать число сотрудников в каждом из отделов (с выводом названий отделов), подготовим шаблон запроса вида:

ЕМР1

ФИО

ОТДЕЛ

 

Р .CNT .ALL. Em

P. Dep

В этом случае получим следующий результат: ЕМР1 ФИО ОТДЕЛ

2 хозтовары

3 игрушки

3 косметика 2 канцтовары

В шаблоне запроса мы применили операцию группирования (см. Пример 11).

Операции вставки, удаления и модификации

В отличие от рассмотренных операций, операции вставки, удаления и модификации приводят к изменению исходной таблицы. Вид операции (вставка – I., удаление – D., модификация – U.) записывается в шаблоне под именем таблицы, а константы и условные выражения указываются по тем же правилам, что и в операциях выборки.

Примеры 13. Операции вставки, удаления, модификации.

Для вставки в таблицу ЕМР нового сотрудника отдела игрушек с фамилией Деревянко Н.В., зарплатой 2000 и руководителем Белкиным Б.Н. нужно сформировать шаблон вида:

11

ЕМР

ФИО

ЗАРПЛАТА

РУКОВОДИТЕЛЬ

ОТДЕЛ

I.

Деревянко Н.В.

2000

Белкин Б.Н.

игрушки

Пусть необходимо удалить всю информацию о сотрудниках отдела игрушек. Шаблон соответствующего запроса будет выглядеть так:

ЕМР

ФИО

ЗАРПЛАТА

РУКОВОДИТЕЛЬ

ОТДЕЛ

D.

 

 

 

игрушки

Для модификации некоторого значения отдельного поля, например, размера зарплаты сотрудника Белкина Б.Р., достаточно сформировать следующий шаблон:

ЕМР

ФИО

ЗАРПЛАТА

РУКОВОДИТЕЛЬ

ОТДЕЛ

U.

Белкин

2100

 

 

Пустое поле означает, что оно не подлежит изменению. Если требуется изменить некоторое значение на «пустое», используется ключевое слово NULL.

Чтобы повысить зарплату сотрудникам отдела игрушек на 10%, можно сформировать шаблон запроса на модификацию следующего вида:

ЕМР

ФИО

ЗАРПЛАТА

РУКОВОДИТЕЛЬ

ОТДЕЛ

U.

 

1.1*sl

 

 

 

 

s1

 

игрушки

Реализация этого запроса происходит в два этапа: сначала выбираются все записи со значением «игрушки» в поле ОТДЕЛ, а затем происходит изменение поля ЗАРПЛАТА отобранных записей на новое значение.

Характеристика языков QBE современных СУБД

Основные отличия языков QBE современных СУБД от рассмотренного нами исходного языка, как правило, сводятся к незначительным изменениям в интерпретации отдельных реляционных операций, введению дополнительных операций и изменению формы представления языка.

Анализ современных СУБД позволяет предположить следующие направления развития языка QBE:

повышение наглядности и удобства;

появление средств, соответствующих новым возможностям СУБД, например, формулировка неточных или нечетких запросов, манипулирование большими объемами данных;

использование новых типов данных (графических, аудио-, видео- и

др.).

применение в ближайшем будущем ограниченного естественного языка формулировки запросов;

в более отдаленной перспективе использование речевого ввода запросов.

Принципиальные возможности для перехода к естественному языку общения и средствам речевого ввода есть уже сегодня. Это можно сделать,

12

например, в виде надстройки над существующими СУБД при использовании словарей соответствия терминов ограниченного естественного языка и названий таблиц БД, полей таблиц, операций над данными и другими элементами QBE.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]