
- •Лекция 7. Операторы реляционной алгебры
- •Понятие реляционной алгебры
- •Основные операторы реляционной алгебры
- •1) Объединение: a union b
- •2) Пересечение: a intersect b
- •3) Вычитание: a minus b
- •4) Произведение: a times b
- •1) Выборка (или ограничение)
- •2) Проекция
- •3) Соединение
- •4) Деление: a divideby b
- •Операции расширения и подведения итогов
- •1. Расширение
- •2. Подведение итогов
- •Операторы обновления
- •1) Вставка записи
- •2) Удаление записи.
- •3) Обновление записи
Лекция 7. Операторы реляционной алгебры
В лекции рассматриваются основные операторы реляционной алгебры и приводятся примеры их реализации на языке SQL.
Цель: познакомить с основными реляционными операторами.
Понятие реляционной алгебры
Реляционная алгебра – это набор операций, которые принимают отношения в качестве операндов и возвращают отношение в качестве результата. Первая версия этой алгебры была определена Э. Коддом.
В основе всех реляционных БД лежит использование реляционной алгебры, которая обеспечивает запись выражений для реализации на некотором языке, например, SQL. Если возможности языка как минимум соответствуют возможностям, обеспеченным алгебраическими операциями, то его называют реляционно полным.
Обычно выделяют 8 основных операторов реляционной алгебры и несколько дополнительных (их количество меняется со временем). Мы рассмотрим два дополнительных оператора: расширения и подведения итогов.
Основные операторы реляционной алгебры
Реляционная алгебра включает восемь основных операций, которые подразделяются на две группы, в каждую из которых входит четыре операции.
1. Традиционные операции с множествами, модифицированные для таблиц (отношений).
1) Объединение: a union b
Результатом операции объединения является отношение, содержащее все кортежи, принадлежащие одному из двух или обоим отношениям.
В отличие от объединения множеств, результатом объединения отношений должно стать отношение, а не набор разнородных кортежей.
При объединении должны соблюдаться два условия:
отношения должны быть совместимы по типу, т.е. иметь одно и то же множество атрибутов, определённых на одних и тех же доменах;
результатом каждой операции должно быть также отношение (свойство замкнутости).
Пусть имеется отношение Students:
StudentID |
Name |
GroupID |
BirthDate |
1 |
Казаков Петр |
2 |
23.04.1990 |
2 |
Васильев Иван |
1 |
11.05.1991 |
4 |
Шишкина Дарья |
2 |
23.09.1991 |
И отношение Teachers:
TeacherID |
Name |
BirthDate |
1 |
Кислицын О.П. |
1.2.1970 |
2 |
Царев С.М. |
10.03.1964 |
4 |
Пестов Д.Н. |
2.05.1980 |
Нам требуется вывести список всех преподавателей и студентов с указанием их дня рождения. Для этого можно использовать следующие операторы SQL:
SELECT Name, BirthDate FROM Students
UNION
SELECT Name, BirthDate FROM Teachers
Результатом выполнения будет следующее отношение:
Name |
BirthDate |
Казаков Петр |
23.04.1990 |
Васильев Иван |
11.05.1991 |
Шишкина Дарья |
23.09.1991 |
Кислицын О.П. |
1.2.1970 |
Царев С.М. |
10.03.1964 |
Пестов Д.Н. |
2.05.1980 |
2) Пересечение: a intersect b
Результатом операции пересечения является отношение, содержащее кортежи, которые принадлежат обоим отношениям.
Для операции пересечения необходимы те же два условия, что и для объединения: совместимость по типу и замкнутость.
Пример: рассмотрим отношение Teachers (преподаватели) и Supervisors (кураторы, могут руководить преподавателями):
Teachers:
TeacherID |
Name |
BirthDate |
1 |
Кислицын О.П. |
1.2.1970 |
2 |
Царев С.М. |
10.03.1964 |
4 |
Пестов Д.Н. |
2.05.1980 |
Supervisors:
SupervisorID |
Name |
BirthDate |
1 |
Кислицын О.П. |
1.2.1970 |
2 |
Царев С.М. |
10.03.1964 |
4 |
Нечаев Н.В. |
12.08.1970 |
Требуется вывести всех преподавателей (из таблицы Teachers), которые одновременно являются кураторами.
SELECT Name FROM Teachers
INTERSECT
SELECT Name FROM Supervisors
Результатом выполнения запроса будет:
Name |
Кислицын О.П. |
Царев С.М. |