Пример 11.
Операции группировки
Вложеные запросы.
Многотабличный запрос
Составное условие
WHERE [NOT] условие1 [AND/OR] [NOT] условие2…
условия:
значение {=/<>/<=/</>=/>} {константа/выражение}
значение1 [NOT] BEETWEEN значение2 AND значение3
значение [NOT] IN {список констант/значений}
значение IS [NOT] NULL
Пример3:
Сотрудники с окладом 800..1000 р.
SELECT Фамилия
FROM Сотрудники
WHERE Оклад BEETWEEN 800 AND 1000
Пример4:
Сотрудники 2, 5 и 6 отделов
SELECT Фамилия
FROM Сотрудники
WHERE Отдел IN 2,5,6
Пример5:
Студенты АД-76, не сдававшие экзамен
SELECT Фамилия
FROM Студент
WHERE Группа=’АД-76’ AND Оценка IS NULL
ORDER BY Упорядочить выводимые поля
ASC по возрастанию
DESC по убыванию
Пример6:
Студенты АД-76, упорядоченные по алфавиту
SELECT Фамилия
FROM Студент
WHERE Группа=’АД-76’
ORDER BY Фамилия ASC
Сотрудники:
Код сотрудника | Фамилия | Код отдела |
Иванов | ||
Петров |
Отделы
Код отдела | Название |
Снабжение |
Пример7:
Список сотрудников из отдела «Снабжения»
|
|
SELECT Фамилия
FROM Сотрудники, Отдел
WHERE Название=’Снабжение’
AND Сотрудники.КодОтдела=Отдел.КодОтдела
Алгоритм выполнения запроса:
1. Строится декартово произведение таблиц
2. Из результата произведения выбираются нужные строки
3. Из строк выбираются нужные столбцы
Пример8:
КодСотрудника | ФИО | КодОтдела | КодНачальника |
Необходимо выбрать ФИО и Фамилию начальника
SELECT А.Фамилия, В.Фамилия
FROM Сотрудник.А, Сотрудник.В
WHERE В.КодСотрудник=А.КодНачальника
Подзапрос помещается в WHERE главного запроса
Пример9:
Расписание
КодСотрудника | День | Время |
Должности работающих в понедельник
SELECT Должность
FROM Сотрудник
WHERE КодСотрудника IN (
SELECT КодСотрудника
FROM Расписание
WHERE День=’Понедельник’
)
Подзапросы бывают двух видов:
1. Некорелированные (результат подзапроса не зависит от главного запроса)
2. Корелированные (связи нет)
Пример10:
Списки людей, работающих в тех отделах, которые работают по понедельникам
Расписание
КодОтдела | День | Время |
SELECT Должность
FROM Сотрудники
WHERE КодОтдела IN (
SELECT КодОтдела
FROM Расписание
WHERE День=’Понедельник’ AND
Сотрудник.КодОтдела=
Расписание. КодОтдела=
)
Встроенные в SQL функции
SUM | Суммирование |
COUNT | Количество элементов в группе |
AVG | Среднее значение в группе |
MAX | Максимальной значение в группе |
MIN | Минимальной значение в группе |
Максимальный и минимальный оклад
SELECT MAX(Оклад), MIN(Оклад)
FROM Сотрудники
Группировка:
SELECT...
...
...
GROUP BY {поле1, поле2} [HAVING условие]
HAVING- условие, накладываемое на группу
Максимальный и минимальный оклад в отделе
SELECT MAX(Оклад), MIN(Оклад)
|
|
FROM Сотрудники
GROUP BY КодОтдела