Содержание
- Реляционная алгебра
- Предназначение
- Замкнутость
- Унарные операции
- Проекция
- Фильтрация
- Переименование
- Операции над множествами
- Объединение
- Пересечение
- Разность
- Соединения
- Полное соединение
- Естественное соединение
- Внешние соединения
- Полусоединения
- Условные соединения
- Деление
- Операции над данными
- Расширение
- Агрегирование
- Свойства реляционной алгебры
- Базис операций
- Ограничения реляционной алгебры
- Реляционная алгебра и 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. Реляционная алгебра
Структура базы данных «Университет»:
- Faculties(FacultyId, FacultyName, DeanId)
- Groups(GroupId, GroupName, GroupFacultyId)
- Students(StudentId, StudentName, GroupId)
- Courses(CourseId, CourseName)
- Lecturers(LecturerId, LecturerName, LecturerFacultyId)
- Plan(GroupId, CourseId, LecturerId)
- Marks(StudentId, CourseId, Mark)
Составьте выражения реляционной алгебры и соответствующие SQL-запросы, позволяющие получать
Информацию о студентах
С заданным идентификатором (StudentId, StudentName, GroupId по :StudentId).
С заданным ФИО (StudentId, StudentName, GroupId по :StudentName).
Полную информацию о студентах
С заданным идентификатором (StudentId, StudentName, GroupName по :StudentId).
С заданным ФИО (StudentId, StudentName, GroupName по :StudentName).
Из заданной группы (StudentId, StudentName, GroupName по :GroupName).
C заданного факультета (StudentId, StudentName, GroupName по :FacultyName).
C факультета, заданного деканом (StudentId, StudentName, GroupName по :LecturerName).
Информацию о студентах с заданной оценкой по дисциплине
С заданным идентификатором (StudentId, StudentName, GroupId по :Mark, :CourseId).
С заданным названием (StudentId, StudentName, GroupId по :Mark, :CourseName).
Которую у него вёл лектор заданный идентификатором (StudentId, StudentName, GroupId по :Mark, :LecturerId).
Которую у них вёл лектор, заданный ФИО (StudentId, StudentName, GroupId по :Mark, :LecturerName).
Которую вёл лектор, заданный идентификатором (StudentId, StudentName, GroupId по :Mark, :LecturerId).
Которую вёл лектор, заданный ФИО (StudentId, StudentName, GroupId по :Mark, :LecturerName).
Информацию о студентах не имеющих оценки по дисциплине
Среди всех студентов (StudentId, StudentName, GroupId по :CourseName).
Тут был дубль задачи, пункт оставлен для сохранения нумерации.
Среди студентов факультета (StudentId, StudentName, GroupId по :CourseName, :FacultyName).
Среди студентов, у которых есть эта дисциплина (StudentId, StudentName, GroupId по :CourseName).
Для каждого студента ФИО и названия дисциплин
Которые у него есть по плану (StudentName, CourseName).
Есть, но у него нет оценки (StudentName, CourseName).
Есть, но у него не 4 или 5 (StudentName, CourseName).
Вёл преподаватель (StudentName, CourseName по :LecturerName).
Вёл преподаватель с :FacultyName (StudentName, CourseName по :FacultyName).
Вёл преподаватель другого факультета (StudentName, CourseName).
Вёл декан (StudentName, CourseName).
Идентификаторы студентов по преподавателю
Имеющих хотя бы одну оценку у преподавателя (StudentId по :LecturerName).
Не имеющих ни одной оценки у преподавателя (StudentId по :LecturerName).
Имеющих оценки по всем дисциплинам преподавателя (StudentId по :LecturerName).
Имеющих оценки по всем дисциплинам преподавателя, которые он вёл у этого студента (StudentId по :LecturerName).
Группы и дисциплины, такие что все студенты группы имеют оценку по этой дисциплине
Идентификаторы (GroupId, CourseId).
Названия (GroupName, CourseName).
Составьте SQL-запросы, позволяющие получать
Суммарный балл
Одного студента (SumMark по :StudentId).
Каждого студента (StudentName, SumMark).
Каждой группы (GroupName, SumMark).
Средний балл
Одного студента (AvgMark по :StudentId).
Каждого студента (StudentName, AvgMark).
Каждой группы (GroupName, AvgMark).
Средний балл средних баллов студентов каждой группы (GroupName, AvgAvgMark).
Для каждого студента: число дисциплин, которые у него были, число сданных дисциплин и число несданных дисциплин (StudentId, Total, Passed, Failed).
Технические особенности проверки.
- Сдача — в PCMS. Если у вас нет аккаунта в PCMS, либо доступа к ДЗ, обратитесь к Николаю Викторовичу Ведерникову.
- Проверяться и оцениваться будет последняя посланная версия.
-
Проверка разделена на 4 фазы:
- пустые таблицы (синтаксис и набор столбцов);
- таблицы с не более чем одной записью;
- таблицы с простыми данными;
- таблицы со сложными данными.
- В случае проблем с синтаксисом или набором столбцов вы будете получать Presentation Error.
- Реляционная алгебра проверяется одним тестом на фазу, движком из тестового полигона.
- SQL проверяется тремя тестами на фазу — с разными СУБД. Первая СУБД — SQLite, как на тестовом полигоне.
-
Известные спецэффекты:
-
SQLite поддерживает только
left join
.right
иоuter join
делаются через него. -
Все вложенные запросы надо именовать, даже если вы не будете
использовать это имя:
select ... from ... (select ... ) SubQueryName ...
- Используйте данные из минимально возможного набора таблиц.
-
SQLite поддерживает только