
- •Язык запросов sql
- •Введение в sql(0-0)
- •Аннотация к лекции
- •Краткая история развития sql
- •Возможности языка
- •Основы sql
- •Типы данных sql
- •Литералы
- •Операторы и выражения
- •Именование объектов
- •Комментарии
- •Итоги лекции
- •Простейшие запросы (0-0)
- •Аннотация к лекции
- •О предложении select
- •Основные фразы – select и from
- •Фраза select
- •Синтаксис фразы select
- •Указание выводимых столбцов
- •Исключение повторяющихся строк
- •Использование вычисляемых выражений
- •Переопределение имен результирующих столбцов
- •Включение литералов в результат запроса
- •Вывод результатов в файл
- •Фраза from
- •Синтаксис фразы from
- •Синонимы таблиц
- •Запрос в качестве имени таблицы
- •Итоги лекции
- •Отбор строк по условию (0-0)
- •Аннотация к лекции
- •Простейшие условия
- •Операторы сравнения
- •Логические операторы
- •Использование выражений над столбцами
- •Специальные операторы
- •Проверка на принадлежность множеству
- •Проверка на принадлежность диапазону значений
- •Проверка на соответствие шаблону
- •Проверка на неопределенное значение
- •Итоги лекции
- •Многотабличные запросы (0-0)
- •Аннотация к лекции
- •Декартово произведение таблиц
- •Условие соединения
- •Соединение таблиц по равенству
- •Соединение таблиц по неравенству
- •Самосоединение таблицы
- •Внешнее соединение таблиц
- •Соединение с использованием фразы from
- •Итоги лекции
- •Использование функций (0)
- •Аннотация к лекции
- •Агрегатные функции
- •Однострочныефункции
- •Строковые функции
- •Числовые функции
- •Временные функции
- •Функции преобразования
- •Итогилекции(урока)
- •Группировка и сортировка (0)
- •Аннотация к лекции
- •Запросы с группировкой строк
- •Понятие группировки строк
- •Группировка по одному столбцу
- •Группировка по нескольким столбцам
- •Использование выражений
- •Условиеотборагрупп
- •Сортировка строк
- •Сортировка по столбцу или выражению
- •Сортировка по нескольким столбцам или выражениям
- •Итоги лекции
- •Множественные операции над таблицами (0-0)
- •Аннотация к лекции
- •Множественные операции в стандарте sql
- •Объединение таблиц
- •Пересечение таблиц
- •Разность таблиц
- •Дополнительные аспекты использования множественных операций
- •Множественные операции и группировка
- •Множественные операции и сортировка
- •Итоги лекции
- •Определение таблиц и представлений (0-0)
- •Аннотация к лекции
- •Создание таблицы
- •Изменениетаблицы
- •Возможности изменения таблиц
- •Добавление столбца
- •Изменение определения столбца
- •Удаление столбца
- •Переименование таблицы
- •Удаление таблицы
- •Определение индексов
- •Представления
- •Итоги лекции
- •Манипулирование данными (0-0)
- •Аннотация к лекции
- •Добавление новых строк
- •Варианты добавления строк
- •Вставка отдельных строк
- •Использование запроса при вставке строк
- •Вставка значений по умолчанию
- •Обновление существующих данных
- •Удаление существующих строк
- •Импорт и экспорт данных
- •Итоги лекции
- •Определение ограничений целостности, ключей, задание прав доступа к данным (0-18)
- •Аннотация к лекции
- •Виды ограничений целостности
- •Ограничение на отсутствие значения
- •Ограничениеуникальности
- •Ограничение первичного ключа
- •Ограничение ссылочной целостности
- •Изменение ограничений целостности
- •Итоги лекции
- •Программирование бд (19)
Группировка по нескольким столбцам
SQL позволяет группировать строки таблицы и по нескольким столбцам. В этом случае имена столбцов перечисляются во фразе GROUP BY через запятую.
Запрос.Вывести количество лекций, читаемых доцентами по неделям.
SELECT t.Name, l.Week, Count(*)
FROM TEACHER t, LECTURE l
WHERE t.TchPK = l.TchFK AND LOWER(t.Post)= 'доцент'
GROUP BY t.Name, l.Week;
Запрос.Для каждой кафедры и должности вывести суммарную и среднюю зарплату преподавателей.
SELECTd.NameAS"Кафедра",
t.Post AS "Должность",
SUM(t.Salary + t.Rise) AS "Сумма зарп.",
ROUND(AVG(t.Salary + t.Rise), 1) AS "Сред, зарп."
FROM DEPARTMENT d, TEACHER t
WHERE d.DepPK = t.DepFK
GROUP BY d.Name, t.Post;
Использование выражений
Хотя стандарт SQLне допускает группировку по выражениям над столбцами, некоторые СУБД такую возможность предоставляют. В этом случае во фразеSELECTтакже можно использовать выражение группировки, однако нельзя выводить по отдельности столбцы, участвующие в этом выражении.
Запрос.Для каждого значения зарплаты, не превышающего 800, вывести это значение и количество преподавателей, такую зарплату получающих.
SELECT Salary + Rise, COUNT(*)
FROM TEACHER
WHERE Salary + Rise <= 800
GROUP BY Salary + Rise;
Условиеотборагрупп
Предположим, что нужно узнать номера корпусов, суммарное количество мест в аудиториях которых превышает 100. Приведенная ниже формулировка запроса является неверной:
SELECT Building
FROM ROOM
WHERE SUM(Seats) > 100
GROUP BY Building;
-------
Ошибка в строке 3:
ORA-00934: групповая функция здесь не разрешена
Дело в том, что фраза WHERE проверяет на соответствие условию строки исходных таблиц, а мы указали в ней агрегатную функцию. Для отбора строк среди полученных групп следует применять фразу HAVING. Она играет такую же роль для групп, что и фраза WHERE для исходных таблиц, и может использоваться лишь при наличии фразы GROUP BY. В предложении SELECT фразы WHERE, GROUP BY и HAVING обрабатываются в следующем порядке.
Фразой WHERE отбираются строки, удовлетворяющие указанному в ней условию.
Фраза GROUP BY группирует отобранные строки.
Фразой HAVING отбираются группы, удовлетворяющие указанному в ней условию.
В связи с вышесказанным, предыдущий запрос необходимо записать так.
Запрос.Указать корпуса, суммарное количество мест в аудиториях которых превышает 100.
SELECT Building
FROM ROOM
GROUP BY Building
HAVING SUM(Seats) > 100;
Сортировка строк
Сортировка по столбцу или выражению
Как мы уже отмечали, строки в таблицах базы данных неупорядочены. Также неупорядочены и строки результирующей таблицы запроса, однако для их упорядочения в предложении SELECTможно воспользоваться фразойODERBY. Она сортирует по значению указанных в ней столбцов (и выражений над столбцами) строки результирующей таблицы запроса. Синтаксис этой фразы следующий:
ORDERBYспецификация_сортировки[, спецификация_сортировки]...
где спецификация_сортировки имеет такой синтаксис:
выражение_сортировки [ASC|DESC]
Сортировать можно по столбцам (выражениям) тех типов, для которых определены операции сравнения. Это относится, в частности, к символьным строкам, числам и временным значениям. Можно указывать направление сортировки.
Далее в этом уроке мы рассмотрим общие способы упорядочения результирующих строк. Правила и возможности сортировки при использовании теоретико-множественных операторов изучаются в следующих разделах курса.
Сортировать строки результирующей таблицы запроса можно по отдельным столбцам, совокупности столбцов, а также по одному или нескольким выражениям над столбцами. Ниже рассматриваются все эти варианты.
Запрос.Вывести алфавитный список фамилий профессоров.
SELECT Name
FROM TEACHER
WHERE LOWER(Post) = 'профессор'
ORDER BY Name;
Запрос.Вывести номера групп и их рейтинг по убыванию рейтинга.
SELECT Num, Rating
FROM SGROUP
ORDER BY Rating DESC;
Запрос.Вывести фамилии ассистентов и их зарплату по ее возрастанию.
SELECT Name, Salary + Rise
FROM TEACHER
WHERE LOWER(Post) = 'ассистент'
ORDER BY Salary + Rise;
SQLпозволяет упорядочивать строки результирующей таблицы не только по тем столбцам, которые в ней присутствуют, но и по столбцам исходной таблицы и выражениям над ними.
Запрос.Вывести фамилии ассистентов по возрастанию их зарплаты.
SELECT Name
FROM TEACHER
WHERE LOWER(Post) = 'ассистент'
ORDER BY Salary + Rise;
Если сортировка производится по столбцу или выражению, указанному в списке фразы SELECT, для указания сортируемого столбца (выражения) во фразеORDERBYможно воспользоваться синонимом. Например, сортировку по синониму в предыдущем запросе можно указать какORDERBYНОМЕР.