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

14 Відбирання груп у запитах. Синтаксис. Навести приклад.

Ограничения на группирование HAVING<Предикат отбора группы>

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

Т.о. предложение HAVING используется для фильтрации групп, а предложение WHERE - для фильтрации строк.

Использование условий отбора групп HAVING

Пример 17 Вывести группы, в которых по одной дисциплине на экзаменах получено больше одной двойки:

SELECT R2.Группа

FROM R1, R2

WHERE Rl.ФИО = R2.ФИО AND Rl.Оценка = 2

GROUP BY R2.Группа , R1.Дисциплина

HAVING COUNT(*)> 1;

15 Групування та сортування записів у запиті. Навести приклад

Сортировка результатов ORDER BY <список полей >

В общем случае результаты запросов не упорядочены. Сортировка осуществляется с помощью предложения ORDER BY. По умолчанию сортировка выполняется по возрастанию (ASC). Для получения сортировки по убыванию используется слово DESC.

Примеры использования предложения ORDER BY

Пример: Отсортировать список студентов по фамилии

SELECT Студенты.*,

FROM Студенты

ORDER BY Студенты.Фамилия DESC;

Пример: Упорядочение результатов запроса по нескольким полям с возрастанием или убыванием (ключевые слова ASC, DESC):

SELECT PD.PNUM, PD.DNUM, PD.VOLUME

FROM PD

ORDER BY DNUM ASC, VOLUME DESC;

Пример : Определить количество студентов, сдававших экзамен по каждой дисциплине

SELECT Р1.Дисциплина, Count(*) AS Количество

FROM Р1

GROUP BY Р1.Дисциплина

ORDER BY Р1.Дисциплина;

Группирование результатов GROUP BY <список полей >

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

Пример использования предложения GROUP BY

Пример: Создать список студентов с указанием оценки по дисциплинам.

SELECT Экзамен.Экзамен, Студенти.Фамилия, Сессия.Оценка

FROM Студенти , Экзамен , Сессия

GROUP BY Экзамен.Экзамен, Студенти.Фамилия, Сессия.Оценка

16 Вкладені запити. Різновиди. Синтаксис. Навести приклади.

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

Внешний оператор SELECT использует результат внутреннего запроса для определения содержания результата всей операции. Внутренние запросы могут помещаются в предложение WHERE и HAVING внешнего оператора SELECT. Внутренние запросы могут использоваться в операторах INSERT, UPDATE, DELETE.

Подзапрос представляет собой способ создания временной таблицы, содержимое которой извлекается и обрабатывается внешним оператором.

Существует три типа внутренних запросов:

- Скалярный подзапрос возвращает значения, выбираемые из пересечения одного столбца с одной строкой – единственное значение.

- Строковый подзапрос возвращает значение нескольких столбцов таблицы, но в виде единственной строки.

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

Пример использования вложенного запроса

Пример: Получить список поставщиков, статус которых меньше максимального статуса в таблице поставщиков

SELECT *

FROM P

WHERE P.STATYS <

(SELECT MAX(P.STATUS)

FROM P);

Результат выполнения запроса эквивалентен:

  • Выполнить один раз вложенный запрос и получить максимальное значение статуса.

  • Сравнить значение статуса поставщика с результатом подзапроса, и отобрать только те строки, в которых статус меньше максимального.

Пример: Перечень сдаваемых в аренду помещений, закрепленных за работниками отделения на улице Горького 18.

SELECT (*)

FROM Аренда

WHERE sno IN

( SELECT sno

FROM штат

WHERE bno=

(SELECT bno

FROM ФИЛИАЛ

WHERE street = “Горького 18”));

Пример: Использование предиката IN. Получить список поставщиков, поставляющих деталь номер 2:

SELECT *

FROM P

WHERE P.PNUM IN

(SELECT DISTINCT PD.PNUM

FROM PD

WHERE PD.DNUM = 2);

Табличный подзапрос

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

Результат выполнения запроса будет эквивалентен

  • Выполнить один раз вложенный подзапрос и получить список номеров поставщиков, поставляющих деталь номер 2.

  • Проверить, содержится ли номер поставщика в результате подзапроса

Пример : Составить список сотрудников, получающих зарплату выше средней с указанием величины превышения.

SELECT ФИО,

Зарплата - (SELECT AVG(зарплата)

FROM Штат)

FROM Штат

WHERE Заплата >

(SELECT AVG(зарплата)

FROM Штат);

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