Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

К9-12В. Вопросы и ответы к ГОСам 2013 / Базы данных / 07. Основы построения запросов в ANSI SQL. Источники данных запроса. Условия выборки кортежей. Агрегатные функции. Групп

.docx
Скачиваний:
68
Добавлен:
10.05.2014
Размер:
102.29 Кб
Скачать
  1. Основы построения запросов в ANSISQL. Источники данных запроса. Условия выборки кортежей. Агрегатные функции. Группировка кортежей. Использование подзапросов. Примеры.

- Результатом запроса SELECT всегда является таблица.

- Данные, возвращаемые запросом содержат данные из таблиц БД, или результаты операций над ними.

- Как правило один и тот же набор результирующих данных может быть получен различными способами. 

- Скорость двух эквивалентных с точки зрения результата запросов может различаться на порядок.

- Манипулятивная часть языка SQL (DML) является декларативным языком программирования.

- Процедурные возможности, как правило, являются СУБД-зависимыми (Transact SQL, PL/SQL)

- Запросы могут быть объединены в хранимую процедуру для повторных вызовов.

- Курсоры позволяют выполнить процедурные действия над отдельными строками, возвращенными запросом

Предложение SELECT

SELECTсписок_вывода

FROMисточники

WHEREусловие_отбора_строк

GROUPBYсписок_для_группирования

HAVINGусловие_отбора_групп

ORDERBYсписок_для_упорядочивания

SELECT[DISTINCT] список_вывода – исключает дубликаты

WHEREусловие_поиска В результате использования WHERE, будут получены только те строки, для которых условие_поискаистенно.

Условие поиска имеет ограничения:

  1. Имя колонки имя должно уникально идентифицировать колонку исходной таблицы .

  2. В условии поиска конструкции 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) //возвращает все заказы, величина которых превосходит среднюю величину заказа для данного покупателя

Соседние файлы в папке Базы данных