
- •Язык запросов 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)
Объединение таблиц
Запрос.Вывести названия факультетов и кафедр, расположенных в корпусе 6, а также фамилии их деканов или заведующих.
SELECT Name, Dean
FROM FACULTY
WHERE Building = '6'
UNION
SELECT Name, Head
FROM DEPARTMENT
WHERE Building = '6';
-------------------
NAME |
DEAN |
базы данных |
Соколов |
информатика |
Сидоров |
программирование |
Федоров |
Запрос.Вывести названия факультетов и кафедр, имеющих фонд финансирования больше 25 000 (также вывести сведения о том, из какой таблицы эти данные получены).
Запрос. Вывести фамилии преподавателей с указанием категории их зарплаты (0-500 – низкая, 500-1000 – средняя, 1000-1500 – высокая, 1500 и более – очень высокая).
SELECT Name "Фамилия", 'низкая' "Категория зарплаты"
FROM TEACHER WHERE Salary + Rise <= 500
UNION
SELECT Name, 'средняя'
FROM TEACHER WHERE Salary + Rise > 500 AND Salary + Rise <= 1000
UNION
SELECT Name, 'высокая'
FROM TEACHER WHERE Salary + Rise > 1000 AND Salary + Rise <- 1500
UNION
SELECT Name, 'очень высокая'
FROM TEACHER WHERE Salary + Rise > 1500;
Часто бывает полезным такое объединение двух и более запросов, в котором второй запрос (и возможные последующие запросы) добавляет в результат строки, которые не были отобраны из базовых таблиц первым запросом.
Рассмотрим пример.
Запрос.Показать фамилии кураторов групп.
SELECT SGROUP.Num Труппа". TEACHER.Name "Куратор"
FROM SGROUP, TEACHER
WHERE SGROUP.CurFK = TEACHER.TehPK;
Теперь предположим, что некоторые из групп кураторов не имеют, а также что не все преподаватели являются кураторами. В результирующей таблице такие группы (в столбце Num) и преподаватели (в столбце Name) не представлены. Однако нам хотелось бы, чтобы были перечислены все группы, независимо от того, есть ли у них куратор, и все преподаватели, независимо от того, являются ли они кураторами.
Запрос. Показать группы и фамилии кураторов групп, включая группы, у которых нет кураторов
SELECT SGROUP.Num "Группа", TEACHER.Name "Куратор"
FROM SGROUP, TEACHER
WHERE SGROUP.CurFK = TEACHER.TchPK
UNION
SELECT SGROUP.Num, "куратора нет"
FROM SGROUP
WHERE SGROUP.CurFK IS NULL OR
NOT SGROUP.CurFK = ANY (SELECT TchPK FROM TEACHER);
Пересечение таблиц
В результирующей таблице оператора INTERSECT содержатся только те строки, которые имеются в обеих исходных таблицах. Исходные таблицы задаются запросами, выступающими в качестве операндов этого оператора.
Запрос.Вывести факультеты, которые имеют кафедры с фондами финансирования больше 26 000 и меньше 15 000.
SELECT f.Name
FROM FACULTY f. DEPARTMENT d
WHERE f.FacPK = d.FacFK AND d.Fund < 15000
INTERSECT
SELECT f.Name
FROM FACULTY f, DEPARTMENT d
WHERE f.FacPK = d.FacFK AND d.Fund > 26000;
Запрос.Вывести названия кафедр, на которых работают профессора и доценты.
SELECT d.Name
FROM DEPARTMENT d, TEACHER t
WHERE d.DepPK = t.DepFK AND LOWER(t.Post) = 'профессор'
INTERSECT
SELECT d.Name
FROM DEPARTMENT d, TEACHER t
WHERE d.DepPK = t.DepFK AND LOWER(t.Post) = 'доцент';
Разность таблиц
Результирующая таблица оператора EXCEPT (MINUS) содержит только те строки, которые имеются в первой из исходных таблиц, но не имеются во второй. Исходные таблицы задаются запросами, выступающими в качестве операндов этого оператора.
Запрос.Вывести фамилии преподавателей, читающих лекции по дисциплине «базы данных», но не читающих лекции по дисциплине «операционные системы».
SELECT t.Name
FROM TEACHER t, LECTURE l. SUBJECT s
WHERE t.TchPK = l.TchFK AND l.SbjFK = s.SbjPK AND
LOWER(s.Name) = 'базы данных'
EXCEPT
SELECT t.Name
FROM TEACHER t, LECTURE l, SUBJECT s
WHERE t.TchPK = l.TchFK AND l.SbjFK = s.SbjPK AND
LOWER(s.Name) = 'операционные системы';