Содержание
- Реляционная алгебра
- Предназначение
- Замкнутость
- Унарные операции
- Проекция
- Фильтрация
- Переименование
- Операции над множествами
- Объединение
- Пересечение
- Разность
- Соединения
- Полное соединение
- Естественное соединение
- Внешние соединения
- Полусоединения
- Условные соединения
- Деление
- Операции над данными
- Расширение
- Агрегирование
- Свойства реляционной алгебры
- Базис операций
- Ограничения реляционной алгебры
- Реляционная алгебра и SQL
- Простые операции
- Соединения
Экзаменационные вопросы
- Реляционная алгебра: предназначение и свойства
- Реляционная алгебра: унарные и множественные операции
- Реляционная алгебра: соединения
- Реляционная алгебра: деление и операции над данными
Практические навыки
- Построение запросов в терминах реляционной алгебры
- Преобразование запросов
- Перевод запросов из терминов реляционной алгебры в термины SQL и обратно
- Построение запросов на SQL (без подзапросов)
Библиография
- Дейт К. Введение в системы баз данных (глава 7)
- Уидом Д., Ульман Д. Основы реляционных баз данных (главы 4 и 5)
- Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 28 – Introduction to SQL-data operations)
- Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 29 – Simple Search Conditions)
- Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 30 – Searching with Joins)
- Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 32 – Searching with Set Operators)
- Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 33 – Searching with Groups)
- Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 34 – Sorting Search Results)
- Select Syntax in MySQL Reference Manual
Домашнее задание 5. Реляционная алгебра
Структура базы данных «Университет»:
- образовательные программы — EdProgs(EdProgId, EdProgName)
- группы — Groups(GroupId, GroupName, EdProgId)
- студенты — Students(StudentId, StudentName, GroupId)
- дисциплины — Courses(CourseId, CourseName)
- лекторы — Lecturers(LecturerId, LecturerName)
- учебные планы — Plans(EdProgId, CourseId, Semester)
- дисциплины, которые велись — Assignments(GroupId, CourseId, Semester, LecturerId)
- оценки — Marks(StudentId, CourseId, Semester, Mark)
Составьте выражения реляционной алгебры и соответствующие SQL-запросы, позволяющие получать
Информацию о студентах
С заданным идентификатором (StudentId, StudentName, GroupId по :StudentId).
С заданным ФИО (StudentId, StudentName, GroupId по :StudеntName).
Полную информацию о студентах
С заданным идентификатором (StudentId, StudentName, GroupName, EdProgName по :StudentId).
С заданным ФИО (StudentId, StudentName, GroupName, EdProgName по :StudentName).
Из заданной группы (StudentId, StudentName, GroupName, EdProgName по :GroupName).
Заданной образовательной программы (StudentId, StudentName, GroupName, EdProgName по :EdProgName).
По дисциплине и семестру (StudentId, StudentName, GroupName, EdProgName по :CourseName, :Semestеr).
Информацию о студентах с оценками по дисциплине
С заданным идентификатором (StudentId, StudentName, GroupId по :Mark, :CourseId, :Sеmеster).
С заданным названием (StudentId, StudentName, GroupId по :Mark, :CourseName, :Sеmestеr).
Которую у него вёл лектор заданный идентификатором (StudentId, StudentName, GroupId по :Mark, :LеcturеrId, :Semеster).
Которую у них вёл лектор, заданный ФИО в семестре (StudentId, StudentName, GroupId по :Mark, :LеcturerName, :Semester).
Которую у них вёл лектор, заданный ФИО (StudentId, StudentName, GroupId по :LеcturerNamе).
Информацию о студентах не имеющих оценки по дисциплине
Среди всех студентов (StudentId, StudentName, GroupId по :CоurseName).
Образовательной программы (StudentId, StudentName, GroupId по :CourseName, :EdPrоgName).
Среди студентов, у которых есть эта дисциплина (StudentId, StudentName, GroupId по :CoursеName).
Для каждого студента ФИО, дисциплины и семестры
Которые у него велись (StudentName, CourseName, Semester).
Есть, но у него нет оценки (StudentName, CourseName, Semester).
Есть, но у него не 4 или 5 (StudentName, CourseName).
Вёл лектор (StudentName, CourseName по :LecturerNamе).
Образовательной программы (StudentName, CourseName, Semester по :EdProgName).
Пары студентов
Одногруппники (StudentName1, StudentName2, GroupName).
Сопрограммники (StudentName1, StudentName2, EdProgName).
Идентификаторы студентов по лектору
Имеющих хотя бы одну оценку у лектора (StudentId по :LеcturerName).
Не имеющих ни одной оценки у лектора (StudentId по :LеcturerName).
Имеющих оценки по всем дисциплино-семестрам лектора (StudentId по :LecturerName).
Имеющих оценки по всем дисциплино-семестрам лектора, которые он вёл у этого студента (StudentId по :LеcturerName).
Группы и дисциплины, такие что все студенты группы имеют оценку по этой дисциплине
Идентификаторы (GroupId, CourseId).
Названия (GroupName, CourseName).
Составьте SQL-запросы, позволяющие получать
Суммарный балл
Одного студента (SumMark по :StudentId).
Каждого студента (StudentName, SumMark).
Каждой группы (GroupName, SumMark).
Средний балл
Одного студента (AvgMark по :StudеntId).
Каждого студента (StudentName, AvgMark).
Каждой группы (GroupName, AvgMark).
Средний балл средних баллов студентов каждой группы (GroupName, AvgAvgMark).
Для каждого студента: число дисциплино-семестров, которые у него вели, число сданных дисциплино-семестров и число несданных дисциплино-семестров (StudentId, Total, Passed, Failed).
Технические особенности проверки.
- Сдача — в PCMS. Если у вас нет аккаунта в PCMS, либо доступа к ДЗ, обратитесь к Николаю Викторовичу Ведерникову.
- Проверяться и оцениваться будет последняя посланная версия.
-
Проверка разделена на 4 фазы:
- пустые таблицы (синтаксис и набор столбцов);
- таблицы с не более чем одной записью;
- таблицы с простыми данными;
- таблицы со сложными данными.
- В случае проблем с синтаксисом или набором столбцов вы будете получать Presentation Error.
- Реляционная алгебра проверяется одним тестом на фазу, движком из тестового полигона.
- SQL проверяется тремя тестами на фазу — с разными СУБД. Первая СУБД — SQLite, как на тестовом полигоне.
-
Известные спецэффекты:
-
SQLite поддерживает только
left join.rightиouter joinделаются через него. -
Все вложенные запросы надо именовать, даже если вы не будете
использовать это имя:
select ... from ... (select ... ) SubQueryName ... - Используйте данные из минимально возможного набора таблиц.
-
SQLite поддерживает только