- •4. Реляционные языки запросов
- •Isbl -язык реляционной алгебры
- •Язык sql
- •Типы данных.
- •Создание, удаление или изменение таблиц или индексов с помощью управляющих запросов sql.
- •Инструкция create table
- •Предложение constraint (sql)
- •Инструкция alter table
- •Инструкция drop
- •Drop {table таблица | index индекс on таблица}
- •Инструкция create index
- •Запросы на выборку. Инструкция select
- •Предикаты all, distinct, distinctrow, top (sql)
- •Select [all | distinct | distinctrow | [top n [percent]]]
- •Предложение from
- •Синтаксис
- •Предложение where
- •Синтаксис
- •Предложение order by
- •Синтаксис
- •Группировка записей. Предложение group by
- •Синтаксис
- •Where условие_отбора
- •Предложение having
- •Синтаксис
- •From таблица
- •Запросы с соединением таблиц. Операция inner join
- •On таблица1.Поле2 оператор_сравнения таблица2.Поле2) or
- •Операции left join, right join
- •From таблица1 [ left | right ] join таблица2
- •Объединение результатов нескольких запросов. Операция union
- •Подчиненный запрос.
- •Запросы на изменение. Инструкция select...Into
- •From источник
- •Предложение in
- •Синтаксис
- •Инструкция insert into
- •Инструкция update
- •Инструкция delete
- •Delete [таблица.*]
- •Перекрестные запросы
- •Синтаксис
- •Запросы с параметрами Описание parameters
- •Синтаксис parameters имя тип_данных [, имя тип_данных [, ...]]
- •Статистические функции sql .
- •Функция Avg
- •Функция Count
- •Функции Min, Max
- •Функции StDev, StDevP
- •Функция Sum
- •Функции Var, VarP
- •Var(выражение)
- •VarP(выражение)
- •Quel:язык реляционного исчисления с переменными-кортежами
- •Query-by-example: язык исчисления с переменными – доменами
- •Формы запросов
- •Зарезервированные слова:
- •Конструирование операторов запроса.
- •Выбор записей
- •Запросы к нескольким таблицам
- •Вычисления
- •Операции
- •Группы записей
- •Работа с наборами записей
- •Развитые операторы запросов.
Группы записей
Все рассмотренные выше запросы относились к отдельным записям в таблице. Кроме того, можно задавать вопросы, относящиеся к группам записей. Можно выделить записи на основании характеристик группы, вычислить статистические показатели по группам записей, сравнить характеристики группы с другими записями. В таких запросах можно использовать агрегатные операторы. Операторы могут работать не со всеми типами полей и включать в группу при вычислении все или только уникальные значения.
Таблица 3
-
Оператор
Типы полей
Группировка по умолчанию
average
Все кроме А
all
count
все
unigue
max
все
unique
min
все
unique
sum
все
кроме A и D all
Группировку по умолчанию можно изменить в запросе, указав в операторе вычисления слово all или unique.
Checkmark в той же строке, что и агрегатный оператор, имеет двоякий смысл:
определить записи в группе на основе значений в помеченном поле;
включить это поле в таблицу Answer.
Примеры:
41) Определить города, в которых находится более двух поставщиков.
S═╦══════НомП════╦═════ИмяП═════╦═════Статус═════╦═════Город══════╗
║ count > 2 ║ ║ ║√ ║
ANSWER═╦══════Город══════╗
1 ║ Москва ║
42) Определить номера поставщиков, поставляющих детали в суммарном количестве более 500.
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║√ ║ ║ sum > 500 ║
ANSWER═╦══НомП═╗
1 ║ П1 ║
2 ║ П2 ║
43) Определить номера деталей, поставляемых партиями в среднем менее 30:
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║ ║√ ║ average < 30 ║
ANSWER═╦══НомД═╗
1 ║ Д14 ║
2 ║ Д3 ║
44) Определить город с максимальным статусом поставщика не более 15.
S═╦══════НомП════╦═════ИмяП═════╦════Статус═════╦═════Город══════╗
║ ║ ║ max <= 15 ║√ ║
ANSWER═╦══════Город══════╗
1 ║ Казань ║
2 ║ Киев ║
3 ║ Рязань ║
Оператор only не является агрегатным оператором, т.е. не выполняет вычислений. Он позволяет выделить группы, в которых записи содержат только одно значение и не содержат каких-либо иных, например:
45) Опеределить, какие поставщики поставляют только детали Д1.
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║√ ║ only Д1 ║ ║
ANSWER═╦══НомП═╗
1 ║ П6 ║
В добавление к вычислению новых полей для каждой записи можно вычислить статистические показатели для групп записей. Для этого агрегатные операторы используются с оператором calc. Calc и соответствующий агрегатный оператор записываются в поле, для которого нужно выполнить вычисления, например:
46) Определить суммарные количества деталей, поставляемых каждым поставщиком:
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║√ ║ ║ calc sum ║
ANSWER═╦══НомП═╦═Sum of Колич══╗
1 ║ П1 ║ 736 ║
2 ║ П10 ║ 288 ║
3 ║ П2 ║ 568 ║
4 ║ ... ║ ║
Группы могут быть определены по значениям нескольких полей, например:
47) Определить суммарные количества деталей каждого номера, поставляемых каждым поставщиком (поставщик может поставлять несколько партий деталей одного номера):
SP════╦════════НомП══════╦════════НомД══════╦════════Колич════════╗
║√ ║√ ║ calc sum as Кол ║
ANSWER═╦══НомП═╦══НомД═╦══════Кол══════╗
1 ║ П1 ║ Д3 ║ 4 ║
2 ║ П1 ║ Д4 ║ 12 ║
3 ║ ... ║ ║ ║
Обычно, когда используется оператор calc, новое поле с результатами вычислений добавляется к таблице Answer. Значение вычисляется для каждой записи в Answer.
Когда calc используется с агрегатным оператором, вычисления выполняются над группами записей. Помещая √ в поле, мы формируем группы, над которыми выполняются вычисления. Если в форме отсутствуют √, вычисления будут выполняться над всеми записями таблицы как над одной группой. Записать √ в одном поле с агрегатным оператором нельзя.
Когда задаются условия выбора записей, тем самым определяются группы для включения в Answer.
48) Определить общее количество поставляемых деталей:
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║ ║ ║ calc sum ║
ANSWER═╦═Sum of Колич══╗
1 ║ 2413 ║
49) Определить номера деталей, поставляемых в количествах, больших 150, и минимальное их количество в партиях:
SP════╦════════НомП══════╦════════НомД══════╦════════Колич════════╗
║ ║√ ║ min > 150,calc min ║
ANSWER═╦══Ном═╦═Min of Колич╗
1 ║ Д9 ║ 300 ║
50) Определить количество поставщиков, поставляющих детали.
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║ calc count ║ ║ ║
ANSWER═╦═Count of НомП═╗
1 ║ 9 ║
51) Определить количество партий поставляемых деталей (общее количество записей в SP):
SP════╦════════НомП══════╦════════НомД══════╦══════Колич══════╗
║ calc count all ║ ║ ║
ANSWER═╦═Count of НомП═╗
1 ║ 25 ║