
К9-12В. Вопросы и ответы к ГОСам 2013 / Базы данных / 07. Основы построения запросов в ANSI SQL. Источники данных запроса. Условия выборки кортежей. Агрегатные функции. Групп
.docx-
Основы построения запросов в ANSISQL. Источники данных запроса. Условия выборки кортежей. Агрегатные функции. Группировка кортежей. Использование подзапросов. Примеры.
- Результатом запроса SELECT всегда является таблица.
- Данные, возвращаемые запросом содержат данные из таблиц БД, или результаты операций над ними.
- Как правило один и тот же набор результирующих данных может быть получен различными способами.
- Скорость двух эквивалентных с точки зрения результата запросов может различаться на порядок.
- Манипулятивная часть языка SQL (DML) является декларативным языком программирования.
- Процедурные возможности, как правило, являются СУБД-зависимыми (Transact SQL, PL/SQL)
- Запросы могут быть объединены в хранимую процедуру для повторных вызовов.
- Курсоры позволяют выполнить процедурные действия над отдельными строками, возвращенными запросом
Предложение SELECT
SELECTсписок_вывода
FROMисточники
WHEREусловие_отбора_строк
GROUPBYсписок_для_группирования
HAVINGусловие_отбора_групп
ORDERBYсписок_для_упорядочивания
SELECT[DISTINCT] список_вывода – исключает дубликаты
WHEREусловие_поиска В результате использования WHERE, будут получены только те строки, для которых условие_поискаистенно.
Условие поиска имеет ограничения:
-
Имя колонки имя должно уникально идентифицировать колонку исходной таблицы .
-
В условии поиска конструкции WHEREНЕ МОГУТ!!! быть использованы агрегатные функции
Конструкция GROUP BY
GROUPBYэлемент [, элемент …] Используется когда в список вывода конструкции SELECT включаются, в том числе, и выражения, содержащие агрегатные функции. Элемент представляется в виде некоторого выражения группирования, содержащего имена колонок и используемого для определения группы строк.
Каждому выражению списка вывода, не содержащему агрегатную функцию, должно соответствовать выражение группирования. Т.е. выражения к которым не применяется агрегатная функция должны присутствовать в GROUPBY.
Конструкция HAVING
В условии поиска HAVING допускается использование имен колонок, идентифицирующих каждую группу таблицы, и агрегатных функций, применяемых к полученным группам.
ORDERBYключ_сортировки [направление_сортировки] , … В качестве ключа_сортировки могут быть указаны имя колонки или простое целое.
Теоретико-множественные операции
UNION или UNIONALL – для операции объединения,
MINUS– для операции вычитания,
INTERSECT– для операции пересечения.
Агрегирующие функции:
Пример:
Посчитать количество оформленных накладных.
SELECT COUNT(idНакладная) as 'Количество накладных'
FROM Накладная
COUNT - количество, MAX - максимальное значение,
MIN - минимальное значение, SUM - сумма значений,
AVG – среднее значение
CREATE TRIGGER Tr1
ON emp
AFTER INSERT
AS
BEGIN
if (select salary from inserted)<10000
rollback
print‘ Запрещено добавлять запись о сотруднике с окладом менее 10 000 рублей'
END
Связанные подзапросы
В SQL можно создавать подзапросы со ссылкой на таблицу из внешнего запроса. В этом случае подзапрос выполняется многократно, по одному разу для каждой строки таблицы из внешнего запроса. Поэтому важно, чтобы подзапрос использовал индекс. Подзапрос может обращаться к той же таблице, чтоб и внешний. Если внешний запрос возвращает относительно небольшое число строк, то связанный подзапрос будет работать быстрее несвязанного. Если подзапрос возвращает небольшое число строк, то связанный запрос выполнится медленнее несвязанного.
SELECT * FROM Orders O1 WHERE Amt>(SELECT AVG(Amt) FROM Orders O2 WHERE O2.CNum=O1.CNum) //возвращает все заказы, величина которых превосходит среднюю величину заказа для данного покупателя