- •Подстановки
- •Создание связей и объединений в запросах
- •Ограничения в многотабличных запросах
- •Редактирование полей справочников
- •Создание связей для запросов
- •Объединение в запросе двух копий одной таблицы (самообъединение)
- •Использование в запросе автоподстановки для автоматического ввода данных
- •Создание параметризованных запросов
- •Запросы, вносящие изменения
- •Специфика:
- •Имя Покупателя : Customer Name Создание и использование подчиненных форм
- •Создание главной и подчиненной форм с помощью мастера
- •Вставка подчиненной формы в главную
- •Связывание главной и подчиненной форм
- •Создание итогов в подчиненных формах
- •Язык sql
- •Команда select
- •Select name1, name2, … -список столбцов, представляемых в результате
- •Устранение избыточности данных
- •Определение выборки – предложение where
- •Булевы операторы: and, or, not
- •Оператор in
- •Оператор between … and
- •Оператор like
- •Оператор is null
- •Применение функций агрегирования
- •Предложение group by
- •Предложение having
- •Ограничение на агрегированные функции
- •Форматирование результатов запросов и выражения
- •Упорядочение выходных полей
- •Использование множества таблиц в одном запросе
- •Операция соединения таблиц посредством ссылочной целостности
- •Вложенные запросы (подзапросы)
- •Связанные подзапросы
- •Оператор exists
- •Объединение множества запросов в один Предложение union
- •Ввод, удаление и изменение значений полей
- •Вставка результатов запроса
- •Исключение (удаление) строк из таблицы
- •Обновление
Предложение group by
Предложение GROUPBYпозволяет определить подлинность значений отдельного поля в терминах другого поля и применять функции агрегирования к полученному подмножеству. Это дает возможность комбинировать поля и агрегатные функции в одномSELECT. Например, предположим, что нужно найти наибольший заказ из тех, что получил каждый из продавцов:
SELECT snum, MAX (amt)
FROM Orders
GROUP BY snum;
При этом результат- несколько строк.
GROUPBYприменяет агрегированные функции отдельно к каждой из серии групп, которые определяются общим значением поля (один и тот жеsnum). Справа- МАХ значение на группу (с номером 1001).
Возможно, применить GROUPBYк нескольким полям:
SELECT snum, odate, MAX (amt)
FROM Orders
GROUP BY snum, odate;
Запрос дает наибольший заказ сделанный каждому продавцу на каждую дату.
Предложение having
Допустим, нам нужно усложнить пример и сказать, что выбираются только покупки, превышающие $ 3000. Т.е. нужно применить WHEREMAX(amt)>3000.00, ноWHEREработает с каждой единственной строкой до вычисления функции, а агрегированные функции работают в терминах групп строк и использованиеWHEREнеприемлемо (получим ошибку).
Для филтрации групп, также как WHEREработает для отдельных строк, применяется специальное предложениеHAVING:
SELECT snum, odate, MAX (amt)
FROM Orders
GROUP BY snum, odate
HAVING MAX (amt)>3000.00;
Выводы: HAVINGпохоже наWHERE, но еслиWHEREдействует на отдельные записи доGROUPBYи функций, тоHAVINGработает с группами после действияGROUPBY.
Ограничение на агрегированные функции
В ANSIверсииSQLнедопустима вложенность, т.е. агрегатная функция в качестве аргумента агрегатной функции:
SELECT odate, MAX (SUM(amt))
FROM Orders
GROUP BY odate;
Форматирование результатов запросов и выражения
К форматированию относится вставка констант в результат запроса, вычисления, задание нужной последовательности.
Выражения с выбранными полями.SQLпозволяет вносить выражения и константы в выбранные поля. Выражения могут заменять поля в предложенияхSELECT. Например, если комиссионные продавцов удобнее представить в виде процентов, то получим:
SELECT snum, sname, city, comm*100
FROM Sales people;
Последний столбец не имеет имени и является выходным столбцом.
Кроме выражений есть возможность вставить константы, например, текстовые.
SELECT snum, sname, city, ‘%’, comm*100
…
или другой пример:
SELECT ‘For’, odate, ‘there are’
COUNT (DISTINCT onum), ‘orders’
FROM Orders
GROUP BY odate
For 10/03/1990, there are 5 orders
For 10/04/1990, there are 2 orders
…
Упорядочение выходных полей
Таблицы в общем случае являются надпорядоченными множествами. Для упорядочивания применяется команда ORDER BY, которая упорядочивает записи в соответствии со значениями одного или нескольких выбранных столбцов. Множество столбцов упорядочиваются одно внутри другого как и в случаеGROUPBY, и можно задать возрастающую (ASC) или убывающую (DESC) последовательность сортировки для каждого из столбцов. По умолчанию- возрастающая.
Например, таблица заявок (Orders), упорядоченная по номеру заявки.
SELECT * FROM Orders
ORDER BY cnum DESC;
Внутри этого порядка можно задать упорядочивание еще по другому столбцу:
ORDER BY cnum DESC, amt DESC;
Так для любого количества столбцов.
Требование стандарта, что столбцы, которые указаны в ORDERBYдолжны быть в числе выбранных (вSELECT).
ORDERBYможет использоваться сGROUPBYдля упорядочивания групп.ORDERBYвыполняется последней. Применим к примеру из начала лекции.
SELECT snum, odate, MAX (amt)
FROM Orders
GROUP BY snum, odate
ORDER BY snum;
вместо имени столбца в ORDERBYдопустимо задавать номер поля в порядке их следования вSELECT:
SELECT sname, comm
FROM Sales people
ORDER BY 2 DESC;
Особенно необходим этот метод в случае выходных столбцов, полученных агрегированием:
S
1001
3 1002
3 1007
2 1003
1
FROM Orders
GROUP BY snum
ORDER BY 2 DESC