Содержание

  1. Реляционная алгебра
    1. Предназначение
    2. Замкнутость
  2. Унарные операции
    1. Проекция
    2. Фильтрация
    3. Переименование
  3. Операции над множествами
    1. Объединение
    2. Пересечение
    3. Разность
  4. Соединения
    1. Полное соединение
    2. Естественное соединение
    3. Внешние соединения
    4. Полусоединения
    5. Условные соединения
  5. Деление
  6. Операции над данными
    1. Расширение
    2. Агрегирование
  7. Свойства реляционной алгебры
    1. Базис операций
    2. Ограничения реляционной алгебры
  8. Реляционная алгебра и SQL
    1. Простые операции
    2. Соединения

Слайды

HTML

Экзаменационные вопросы

  1. Реляционная алгебра: предназначение и свойства
  2. Реляционная алгебра: унарные и множественные операции
  3. Реляционная алгебра: соединения
  4. Реляционная алгебра: деление и операции над данными

Практические навыки

  1. Построение запросов в терминах реляционной алгебры
  2. Преобразование запросов
  3. Перевод запросов из терминов реляционной алгебры в термины SQL и обратно
  4. Построение запросов на SQL (без подзапросов)

Библиография

  1. Дейт К. Введение в системы баз данных (глава 7)
  2. Уидом Д., Ульман Д. Основы реляционных баз данных (главы 4 и 5)
  3. Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 28 – Introduction to SQL-data operations)
  4. Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 29 – Simple Search Conditions)
  5. Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 30 – Searching with Joins)
  6. Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 32 – Searching with Set Operators)
  7. Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 33 – Searching with Groups)
  8. Gulutzan P., Pelzer T. SQL-99 complete, really (Chapter 34 – Sorting Search Results)
  9. Select Syntax in MySQL Reference Manual

Домашнее задание 5. Реляционная алгебра

Реляционная алгебра

Структура базы данных «Университет»:

  • Students(StudentId, StudentName, GroupId)
  • Groups(GroupId, GroupName)
  • Courses(CourseId, CourseName)
  • Lecturers(LecturerId, LecturerName)
  • Plan(GroupId, CourseId, LecturerId)
  • Marks(StudentId, CourseId, Mark)

Составьте выражения реляционной алгебры и соответствующие SQL-запросы, позволяющие получать:

  1. Информацию о студентах (StudentId, StudentName, GroupId)
    1. С заданным идентификатором (:StudentId);
    2. С заданным ФИО (:StudentName).
  2. Полную информацию о студентах (StudentId, StudentName, GroupName)
    1. С заданным идентификатором (:StudentId);
    2. С заданным ФИО (:StudentName).
  3. Информацию о студентах с заданной оценкой (:Mark) по дисциплине
    1. С заданным идентификатором (:CourseId);
    2. С заданным названием (:CourseName);
    3. Который у него вёл (:LecturerId);
    4. Который у него вёл (:LecturerName);
    5. Который вёл (:LecturerId);
    6. Который вёл (:LecturerName).
  4. Информацию о студентах не имеющих оценки по дисциплине :CourseName
    1. Среди всех студентов;
    2. Среди студентов, у которых есть эта дисциплина.
  5. Для каждого студента ФИО и названия дисциплин
    1. Которые у него есть по плану;
    2. Есть, но у него нет оценки;
    3. Есть, но у него не 4 или 5.
  6. Идентификаторы студентов по преподавателю (:LecturerName)
    1. Имеющих хотя бы одну оценку у преподавателя;
    2. Не имеющих ни одной оценки у преподавателя;
    3. Имеющих оценки по всем дисциплинам преподавателя;
    4. Имеющих оценки по всем дисциплинам преподавателя, которые он вёл у этого студента;
  7. Группы и дисциплины, такие что все студенты группы сдали эту дисциплину.
    1. Идентификаторы;
    2. Названия.

Составьте SQL-запросы, позволяющие получать:

  1. Суммарный балл (SumMark)
    1. Одного студента :StudentId;
    2. Каждого студента (указать StudentName);
    3. Каждой группы (указать GroupName).
  2. Средний балл (AvgMark)
    1. Одного студента :StudentId;
    2. Каждого студента (указать StudentName);
    3. Каждой группы (указать GroupName);
    4. Средний балл средних баллов (AvgAvgMark) студентов каждой группы (GroupName).
  3. Для каждого студента (StudentName): число дисциплин, которые у него были (Total), число сданных дисциплин (Passed) и число несданных дисциплин (Failed).
Тестовый полигон

Технические особенности проверки.

  • Сдача — в PCMS.
  • Проверяться и оцениваться будет последняя посланная версия.
  • Проверка разделена на 4 фазы:
    1. пустые таблицы (синтаксис и набор столбцов);
    2. таблицы с не более чем одной записью;
    3. таблицы с простыми данными;
    4. таблицы со сложными данными.
  • В случае проблем с синтаксисом или набором столбцов вы будете получать Presentaion Error.
  • Реляционная алгебра проверяется одним тестом на фазу, движком из тестового полигона.
  • SQL проверяется тремя тестами на фазу — с разными СУБД. Первая СУБД — SQLite, как на тестовом полигоне.
  • Известные спецэффекты:
    • SQLite поддерживает только left join. right/оuter join делаются через него.
    • Все вложенные запросы надо именовать, даже если вы не будете использовать это имя:
          select ... from ... (select ... ) SubQueryName ...
      
    • Используйте данные из минимально возможного набора таблиц.