- •Лабораторная работа 5 Функции sql Oracle. Дополнительные фразы предложения select Содержание
- •1.Цели лабораторной работы
- •2.Теоретические основы
- •2.1.Функции sql Oracle
- •2.1.1.Агрегатные функции
- •2.1.2.Функции одной строки
- •2.1.2.1.Числовые функции
- •2.1.2.2.Символьные функции
- •2.1.2.3.Функции даты
- •Строковые функции, которые возвращают числовые значения
- •2.1.2.4.Функции преобразования
- •2.1.2.5.Другие функции одной строки
- •2.2.Фразы group by и having
- •2.2.1.Синтаксис:
- •2.2.2.Назначение
- •2.3.Фраза order by
- •2.3.1.Синтаксис:
- •2.3.2.Назначение
- •3.Описание и примеры
- •3.1.Агрегатные функции
- •3.2.Фразы group by и having
- •3.3.Фраза order by
- •4.Варианты заданий
- •Фраза order by
- •4.1.Вариант 1
- •4.2.Вариант 2
- •4.3.Вариант 3
- •4.4.Вариант 4
- •4.5.Вариант 5
- •4.6.Вариант 6
- •4.7.Вариант 7
- •4.8.Вариант 8
- •4.9.Вариант 9
- •4.10.Вариант 10
- •4.11.Вариант 11
- •4.12.Вариант 12
- •4.13.Вариант 13
- •4.14.Вариант 14
- •4.15.Вариант 15
- •4.16.Вариант 16
- •4.17.Вариант 17
- •4.18.Вариант 18
- •5.Контрольные вопросы
3.Описание и примеры
3.1.Агрегатные функции
Агрегатные функции без фраз WHERE и GROUP BY. Если фразы WHERE и GROUP BY отсутствуют, то областью действия агрегатной функции являются все строки таблицы.
Пример. Сколько строк в таблице TEACHER:
SELECT COUNT(*) AS Total_rows_in_TEACHER_table
FROM TEACHER;
Пример. Чему равна сумма фондов всех факультетов:
SELECT SUM(Fund)
FROM FACULTY;
Пример. Какой средний фонд финансирования кафедр:
SELECT AVG(Fund)
FROM DEPARTMENT;
Агрегатные функции с фразой WHERE. При наличии фразы WHERE областью действия агрегатной функции являются те строки, которые удовлетворяют условию фразы WHERE.
Пример. Какова средняя ставка ассистентов, которые не имеют надбавки.
SELECT AVG(Salary)
FROM TEACHER
WHERE UPPER(Post) = 'ASSISTANT' AND Commission IS NULL;
Пример. Какой максимальный фонд среди кафедр факультета информатики?
SELECT MAX(DEPARTMENT.Fund)
FROM DEPARTMENT, FACULTY
WHERE DEPARTMENT.FacNo = FACULTY.FacNo AND UPPER(FACULTY.Name) = 'INFORMATICS';
Выражения в агрегатной функции. Аргументы агрегатных функций могут содержать выражения над столбцами таблицы.
Премер. Какова максимальная величина Salary+Commission?
SELECT MAX(Salary + Commission)
FROM TEACHER;
Пример. Какова разница между максимальной и минимальной ставками?
SELECT MAX(Salary) – MIN(Salary)
FROM TEACHER;
DISTINCT в агрегатных функциях. Ключевое слово DISTINCT означает, что в расчет следут брать только уникальные значения столбца (выражения) аргумента.
Пример. Сколько номеров телеыонов в таблице TEACHER:
SELECT COUNT(DISTINCT Tel) AS Number_of_telephones
FROM TEACHER;
Пример. Сколько должностей в таблице TEACHER:
SELECT COUNT(DISTINCT Post)
FROM TEACHER;
Множество агрегатных функций в списке select. Список Select может содержать множество агрегатных функций.
Example. Сколько профессоров в Вузе и какова их средняя ставка:
SELECT COUNT(*), SUM( Salary )
FROM TEACHER
WHERE UPPER(Post) = 'PROFESSOR';
Агрегатные функции с фразой GROUP BY. См. примеры фразы использования фразы GROUP BY.
3.2.Фразы group by и having
GROUP BY и агрегатные функции в списке select.
Пример. Сколько кафедр в каждом из корпусов:
SELECT Building, COUNT(*)
FROM DEPARTMENT
GROUP BY Building;
Example. Какова сумма зарлпты (Salary+Commission) по всем имеющимся должностям:
SELECT Post, SUM(Salary + Commission)
FROM TEACHER
GROUP BY Post;
Группирование и фраза WHERE. Если запрос содержит фразы WHERE и GROUP BY, то фразаWHERE обрабатывается первой, а затем применяется группирование.
Пример. Для каждого корпуса подсчитать количество аудиторий вместимостью более 50:
SELECT Building, COUNT(*)
FROM ROOM
WHERE Seats > 50
GROUP BY Building;
Пример. Для корпусов 5, 7 и 12 подсчитать количество аудиторий вместимостью более 50:
SELECT Building, COUNT(*)
FROM ROOM
WHERE UPPER(Building) IN ('5', '7', '12') AND Seats > 50
GROUP BY Building;
Группирование по многим столбцам. Можно группировать по многим столбцам.
Пример. Для каждой недели и дня недели подсчитать количество лекций типа “lab”:
SELECT Day, Week, COUNT(*)
FROM LECTURE
WHERE UPPER(Type) = 'LAB'
GROUP BY Week, Day;
Группирование и соединение различных таблиц. Имеется возможность соединить две или более таблиці и зптем произвести группирование по соединенной таблице.
Пример. По каждому факультету выдать количество кафедр:
SELECT f.Name, COUNT(*)
FROM FACULTY f, DEPARTMENT d
WHERE f.FacNo = d.FacNo
GROUP BY f.Name;
Пример. По каждому факультету выдать количество профессоров:
SELECT f.Name, COUNT(*)
FROM FACULTY f, DEPARTMENT d, TEACHER t
WHERE f.FacNo = d.FacNo AND d.DepNo = t.DepNo AND UPPER(t.Post) = 'PROFESSOR'
GROUP BY f.Name;
Пример. Для каждой кафедры каждого факультета подсчитать количество профессоров:
SELECT f.Name, d.Name, COUNT(*)
FROM FACULTY f, DEPARTMENT d, TEACHER t
WHERE f.FacNo = d.FacNo AND d.DepNo = t.DepNo AND UPPER(t.Post) = 'PROFESSOR'
GROUP BY f.Name, d.Name;
Использование фразы HAVING. Она задает условие на группу. Фразы HAVING обычно содержат агрегатную функцию.
Example. Вывести корпуса, в которых суммарное количество мест в аудиториях меньше 1000:
SELECT Building
FROM ROOM
GROUP BY Building
HAVING SUM(Seats) < 1000;
