Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
42
Добавлен:
08.01.2022
Размер:
1 Mб
Скачать
  1. Агрегатные функции в операторе выбора. Вложенные запросы.

Агрегатные функции - позволяют вычислять обобщенные групповые значения с необходимой предварительной группировкой.

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

COUNT – количество строк или непустых полей (числовые и символьные поля)

SUM – сумма выбранных значений поля (числовые поля)

AVG – среднеарифметические выбранных значений поля (числовые поля)

MIN/MAX – наименьшее/наибольшее выбранных значений поля (числовые и символьные поля)

SELECT id_topic, COUNT(id_topic) FROM posts

GROUP BY id_topic

HAVING COUNT(id_topic) > 2;

Кроме того, агрегатные функции можно использовать без группировки, тогда все отношение рассматривается как одна группа, для которое вычисляется значение.

SELECT COUNT(id_topic) FROM posts;

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

Вложенные запросы.

С помощью SQL можно вкладывать запросы друг друга. Обычно внутренний запрос генерирует значение, которое проверяется в предикате внешнего запроса (в предложении where или having), определяющего, верно оно или нет. Совместно с подзапросом можно использовать предикат EXISTS, который возвращает истину, если вывод подзапроса не пуст.

R1 = (ФИО, Дисциплина, Оценка); R2 = (ФИО, Группа); R3 = (Группы, Дисциплина )

Список тех, кто сдал все положенные экзамены (вложенный – сколько надо экзаменов, внешний – сколько сдал): SELECT ФИО FROM R1 WHERE Оценка > 2 GROUP BY ФИО

HAVING COUNT (*) = (SELECT COUNT (*) FROM R2, R3

WHERE R2.Группa = R3.Группа AND ФИО = R1.ФИО)

В стандарте SQL92 операторы сравнения расширены до многократных сравнений с использованием ключевых слов ANY и ALL. Это расширение используется при сравнении значения определенного столбца со столбцом данных, возвращаемым вложенным запросом.

ANY - предикат будет истинен, если хотя бы для одного значения из подзапроса предикат сравнения истинен.

ALL - предикат сравнения был бы истинен при сравнении со всеми строками подзапроса.

Например, найдем студентов, которые сдали все экзамены на оценку не ниже чем «хорошо». Работаем с той же базой «Сессия», но добавим к ней еще одно отношение R4, которое характеризует сдачу лабораторных работ в течение семестра:

Select R1.ФИО From R1 Where 4 > = All (Select Rl.Оценка From Rl as R11 Where R1.Фио = R11.Фио)

  1. Поддерживаемый набор символов pl/sql. Арифметические операторы и операторы отношения

В PL/SQL действует соглашение, что все символы приводятся к верхнему регистру, поэтому эти объявления одинаковы:

A int;

a int;

Запрещено использовать зарезервированные системой имена встроенных функций и пакетов. (например, нельзя создать таблицу с именем TABLE). В конце оператора ставится точка с запятой, либо слеш.

Операторы — это синтаксические конструкции языка, которые предназначены для выполнения определенных действий.

Арифметические: +… - … * … / … ** (возведение в степень)

Операторы отношения: = … < … > … <= … >= ….< > / != / ~= / ^= (неравно)