
- •Лекция 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) Обновление записи
4) Деление: a divideby b
Результатом деления двух отношений (бинарного и унарного) является отношение, содержащее все значения атрибута первого бинарного отношения, которые соответствуют всем значениям унарного отношения.
Эта операция не имеет аналога в MS SQL Server 2008, поэтому рассмотрим на примере деления отношения R1 на R2:
R1:
A |
X |
A |
Y |
B |
Z |
B |
X |
C |
Y |
R2:
X |
Y |
В результате получится отношение:
R:
A |
Операции расширения и подведения итогов
После того, как Э. Кодд предложил восемь основных операций, многочисленные авторы предложили новые алгебраические операции. Мы рассмотрим лишь две из них – расширение и подведение итогов. Эти операции удачно дополняют основной набор и являются наиболее востребованными.
1. Расширение
С помощью операции расширения из отношения создаётся новое отношение, содержащее новый атрибут, значения которого получены посредством скалярных вычислений.
Пусть дано следующее отношение Teachers:
TeacherID |
Name |
BirthDate |
1 |
Кислицын О.П. |
1.2.1970 |
2 |
Царев С.М. |
10.03.1964 |
4 |
Пестов Д.Н. |
2.05.1980 |
Добавим новый атрибут Age, который будет показывать, сколько полных лет исполнилось преподавателю:
SELECT TeacherID, Name, BirthDate, DATEDIFF(YEAR, BirthDate, GetDate()) AS ‘Age’ FROM Teachers
Результатом выполнения будет отношение:
TeacherID |
Name |
BirthDate |
Age |
1 |
Кислицын О.П. |
1.2.1970 |
39 |
2 |
Царев С.М. |
10.03.1964 |
45 |
4 |
Пестов Д.Н. |
2.05.1980 |
29 |
2. Подведение итогов
Операция подведения итогов даёт возможность "вертикальных" вычислений. Для этого используются агрегатные функции, которые для набора значений возвращают одно единственное. Наиболее распространенные функции: Sum, Count, Avg, Min, Max.
Пусть дано следующее отношение Students:
StudentID |
Name |
GroupID |
1 |
Казаков Петр |
2 |
2 |
Васильев Иван |
1 |
4 |
Шишкина Дарья |
2 |
5 |
Драгомиров Евгений |
1 |
6 |
Васнецова Евгения |
2 |
Требуется подсчитать, сколько студентов в каждой группе:
SELECT GroupID, Count(StudentID) as ‘StudentCount' FROM Students
GROUP BY GroupID
Результатом выполнения будет отношение:
GroupID |
StudentCount |
1 |
2 |
2 |
3 |
Операторы обновления
Предназначены для управления данными в таблицах. Существует три операции обновления.
1) Вставка записи
Позволяет добавлять одну или несколько новых записей в отношение.
Пусть имеется отношение Students:
StudentID |
Name |
GroupID |
1 |
Казаков Петр |
2 |
2 |
Васильев Иван |
1 |
4 |
Шишкина Дарья |
2 |
Чтобы добавить в него две новые записи, можно использовать следующие операторы SQL:
INSERT INTO Students (Name, GroupID) VALUES (‘Драгомиров Евгений’, 1)
INSERT INTO Students (Name, GroupID) VALUES (‘Васнецова Евгения’, 2)
После выполнения, отношение Students будет выглядеть следующим образом:
StudentID |
Name |
GroupID |
1 |
Казаков Петр |
2 |
2 |
Васильев Иван |
1 |
4 |
Шишкина Дарья |
2 |
5 |
Драгомиров Евгений |
1 |
6 |
Васнецова Евгения |
2 |