Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
database.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.12 Mб
Скачать

2. Группы внутри групп.

Сводные результаты по группам и подгруппам можно получить путем указания более чем одного столбца в предложении GROUP BY. В следующем примере количество людей подсчитывается не только по отделам, но и по должностям. Порядок сортировки, используемый по умолчанию, определяется порядком столбцов в предложении GROUP BY.

Пример 3: Вывод количества преподавателей по должностям внутри кафедр (таблица Dolzhn).

SELECT kaf, dolzhn, COUNT(*) as “Количество”

FROM Dolzhn

GROUP BY kaf, dolzhn;

3. Предложение having.

Предложение WHERE для исключения групп не используется. Для исключения целиком некоторых групп следует пользоваться предложением HAVING.

Пример 4: Вывод номера отдела и средней заработной платы для тех отделов, где средняя заработная плата превышает 10000.

SELECT id_otdel, AVG(salary)

FROM emp

GROUP BY id_otdel

HAVING AVG(salary)>10000.

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

Синтаксис:

SELECT {столбец, групповая_функция}

FROM Таблица

[WHERE условие]

[GROUP BY выражение_группирования]

[HAVING условие_группы]

[ORDER BY {Столбец, выражение}[ASC|DESC]];

где HAVING - вывод конкретных групп.

Условие_группы - включает в выходной результат только те группы, для которых заданное условие истинно (TRUE).

Если используется предложение HAVING, сервер базы данных ORACLE выполняет следующие действия:

  • Группирует строки.

  • Применяет групповую функцию.

  • Производит вывод групп, удовлетворяющих условию предложения HAVING.

Предложение HAVING может предшествовать предложению GROUP BY, но более логично ставить предложение GROUP BY первым. Образование групп и вычисление групповых функций происходят до того, как к группам из списка SELECT применяется ограничение, заданное в предложении HAVING.

Пример 5: Вывод должности и общей заработной платы для всех должностей с заработной платой более 20000 в месяц, кроме вице-президентов. Выходные строки сортируются по заработной плате.

SELECT dolzhn, SUM(salary) SUMMA

FROM EMP

WHERE dozhn NOT LIKE ‘VP%’

GROUP BY dolzhn

HAVING SUM(salary)>20000

ORDER BY SUM(salary);

Сервер Oracle рассматривает предложения в следующем порядке:

  • Если команда содержит предложение WHERE сервер, прежде всего, отбирает строки в соответствии с этим предложением.

  • Сервер выявляет группы, заданные предложением GROUP BY.

  • Исключаются группы, не удовлетворяющие критерию предложения HAVING.

Предложение GROUP BY можно использовать без указания групповой функции в списке SELECT. Если отбор строк производится по результатам групповой функции, то использование как предложения GROUP BY, так и предложения HAVING обязательно

Тема 9: Подзапросы.

  1. Подзапрос. Его назначение и синтаксис.

  2. Однострочные и многострочные подзапросы.

  1. Подзапрос. Его назначение и синтаксис.

Подзапрос - это команда SELECT, вложенная в предложение другой команды SQL (например, SELECT, CREATE, INSERT и т.д.).

Структура подзапроса представлена на рисунке:

Рис.1. Структура подзапроса

Подзапросы полезны при написании команд SELECT для выборки значений по некоторому условию, значения операндов которого заранее неизвестны. Подзапросы можно использовать в разных предложениях команд SQL:

  • WHERE.

  • HAVING.

  • FROM команды SELECT или DELETE.

Синтаксис запроса с подзапросом:

SELECT список_выбора

FROM имя_таблицы

WHERE выражение оператор

(SELECT список_выбора

FROM имя_таблицы

.);

где оператор – это оператор сравнения (например, >,<,= и т.д.) или оператор IN.

Правила оформления подзапроса следующие:

  • подзапрос должен быть заключен в круглые скобки;

  • подзапрос должен находиться справа от оператора сравнения в логическом выражении;

  • в подзапросе нельзя использовать предложение ORDER BY.

Обработка вложенных подзапросов

Вложенная команда SELECT выполняется первой. Результат передается в условие главного запроса. Первой выполняется команда SELECT вложенного блока запроса. Далее обрабатывается главный блок запроса. Результат подзапроса используется при этом для вычисления условия поиска.

Пример 1. Выборка фамилий и должностей сотрудников, имеющих такой же стаж, как у сотрудника Иванова (таблица Prep).

SELECT fam, dolzhn

FROM Prep

WHERE stash =

(SELECT stash

FROM Prep

WHERE fam = ‘Иванов’);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]