Реляционная алгебра, операции реляционной алгебры
Назад<<< | Листать | Вперёд>>> |
Что такое реляционная алгебра
Реляционная алгебра - это язык операций, выполняемых над отношениями - таблицами реляционной базы данных. Операции реляционной алгебры позволяют на основе одного или нескольких отношений создавать другое отношение без изменения самих исходных отношений. Полученное другое отношение обычно не записывается в базу данных, а существует в результате выполнения SQL-запроса - массиве, создаваемом функциями для работы с базами данных в языках программирования. Для каждой операции реляционной алгебры будет дана её реализация в виде запросов на языке SQL.
Рассмотрим операции реляционной алгебры. Чтобы Вам не отвлекаться на содержание таблиц не Ваших баз данных, таких как "Продукты", "Водители", "сливы", "груши", "чай", "кофе", Владимиры, Сергеи и т.п. будем выполнять операции над отношениями (таблицами) с абстрактными данными, такими как R1, R2 (названия таблиц - отношений) и т.д. и А1, А2, А3 (названия атрибутов - столбцов) и h15, w11 и т.п. (содержание записей таблиц базы данных).
Основы реляционной алгебры - математическая теория множеств и операции над множествами. А уйти ещё глубже в теорию реляционных баз данных можно на уроке Реляционная модель данных.
Приоритеты выполнения операций реляционной алгебры (в порядке убывания пунктов списка, а в одном пункте - операции с равными приоритетами):
- селекция, проекция
- декартово произведение, соединение, пересечение, деление
- объединение, разность.
Операция выборки
О том, как работает оператор языка SQL SELECT, можно узнать на уроке SQL SELECT - запрос на выборку из базы данных.
Операция выборки работает с одним отношением
и определяет результирующее отношение R, которое
содержит только те кортежи (или строки, или записи), отношения
,
которые удовлетворяют заданному условию (предикату P).
Таким образом, операция выборки - унарная операция - и записывается следующим образом:
,
где P - предикат (логическое условие).
Запрос SQL
Теперь посмотрим, что получится в результате выполнения этой операции реляционной алгебры и соответствующего ей запроса SQL. В таблице ниже дано одно отношение, с которым работает эта операция.
R3 | |||
A1 | A2 | A3 | A4 |
3 | hh | yl | ms |
4 | pp | a1 | sr |
1 | rr | yl | ms |
Просматриваем столбец А3 и устанавливаем, что предикату A3>'d0' удовлетворяют записи в первой и третьей строках исходного отношения (так как номер буквы y в алфавите больше номера буквы d). В результате получаем следующее новое отношение, в котором две строки:
R | |||
A1 | A2 | A3 | A4 |
3 | hh | yl | ms |
1 | rr | yl | ms |
Комбинировать всевозможные логические условия для выборок Вам поможет материал "Булева алгебра (алгебра логики)".
А в материалах раздела "Программирование PHP/MySQL" Вы найдёт немало примеров комбинаций различных логических условий для выборок из базы данных.
Операция проекции
Операция проекции () работает, как и операция выборки, только с одним отношением
и определяет
новое отношение R, в котором есть лишь те атрибуты (столбцы),
которые заданы в операции, и их значения.
Запрос SQL
Пусть вновь дано то же отношение R3:
R3 | |||
A1 | A2 | A3 | A4 |
3 | hh | yl | ms |
4 | pp | a1 | sr |
1 | rr | yl | ms |
Из исходного отношения выбираем только столбцы А4 и А3 и видим, что строки со значениями - первая и третья - идентичны. Исключаем дубликат (за это отвечает ключевое слово DISTINCT в SQL-запросе, которое говорит, что нужно выбрать только уникальные записи) и получаем следующее новое отношение, в котором два атрибута и две строки (записи):
R | |
A4 | A3 |
ms | yl |
sr | a1 |
Операция объединения
Результатом объединения двух множеств (отношений) А и В () будет такое множество
(отношение) С, которое включает в себя те и только те элементы, которые есть или во множестве А или
во множестве В. Говоря упрощённо, все элементы множества А и множества В, за исключением
дубликатов, образующихся за счёт того, что некоторые элементы есть и в первом, и во втором
множестве. Операция объединения реляционной алгебры идентична операции объединения множеств,
которая также описана в материале "Множества и операции над множествами".
Запрос SQL
Теперь посмотрим, что получится в результате выполнения этой операции реляционной алгебры и соответствующего ей запроса SQL. Теперь даны два отношения, так как операция объединения - бинарная операция:
R1 | R2 | |||||
A1 | A2 | A3 | A1 | A2 | A3 | |
Z7 | aa | w11 | X8 | pp | k21 | |
B7 | hh | h15 | Q2 | ee | h15 | |
X8 | pp | w11 | X8 | pp | w11 |
Объединяем строки первого и второго отношения и видим, что третья строка, которая является третьей и в первом, и во втором отношении - идентичны, поэтому её включаем в новое отношение только один раз. Получаем следующее отношение:
R | ||
A1 | A2 | A3 |
Z7 | aa | w11 |
B7 | hh | h15 |
X8 | pp | w11 |
X8 | pp | k21 |
Q2 | ee | h15 |
Важно следующее: операция объединения может быть выполнена только тогда, когда два отношения обладают одинаковым числом и названиями атрибутов (столбцов), или, говоря формально, совместимы по объединению.
Операция пересечения
Результатом пересечения двух множеств (отношений) А и В () будет такое множество
(отношение) С, которое включает в себя те и только те элементы, которые есть и во множестве А,
и во множестве В. Операция пересечения реляционной алгебры идентична операции пересечения множеств,
которая также описана в материале "Множества и операции над множествами".
Запрос SQL
В некоторых диалектах SQL отсутствует ключевое слово INTERSECT. Поэтому, например, в MySQL и других, операция пересечения множеств может реализована с применением предиката EXISTS.
Теперь посмотрим, что получится в результате выполнения этой операции реляционной алгебры и соответствующего ей запроса SQL. Вновь даны два отношения R1 и R2:
R1 | R2 | |||||
A1 | A2 | A3 | A1 | A2 | A3 | |
Z7 | aa | w11 | X8 | pp | k21 | |
B7 | hh | h15 | Q2 | ee | h15 | |
X8 | pp | w11 | X8 | pp | w11 |
Просматриваем все записи в двух отношениях, и обнаруживаем, что и в первом, и во втором отношении есть одна строка - та, которая является третьей и в первом, и во втором отношении. Получаем новое отношение:
R | ||
A1 | A2 | A3 |
X8 | pp | w11 |
Операция разности
Разность двух отношений R1 и R2 () состоит из кортежей (или записей, или строк),
которые имеются в отношении R1, но отсутствуют в отношении R2. Отношения R1 и R2 должны быть
совместимы по объединению. Операция разности реляционной алгебры идентична операции разности множеств,
которая также описана в материале "Множества и операции над множествами".
Запрос SQL
SELECT A1, A2, A3 from R1
Установим, что получится в результате выполнения этой операции реляционной алгебры и соответствующего ей запроса SQL. Вновь даны два отношения R1 и R2:
R1 | R2 | |||||
A1 | A2 | A3 | A1 | A2 | A3 | |
Z7 | aa | w11 | X8 | pp | k21 | |
B7 | hh | h15 | Q2 | ee | h15 | |
X8 | pp | w11 | X8 | pp | w11 |
Из отношения R2 исключаем строку, которая есть также в отношении R2 - третью - и получаем новое отношение:
R | ||
A1 | A2 | A3 |
X8 | pp | w11 |
Q2 | ee | h15 |
В некоторых диалектах SQL отсутствует ключевое слово EXCEPT. Поэтому, например, в MySQL и других, операция пересечения множеств может реализована с применением предиката NOT EXISTS.
Операция декартова произведения
Операция декартова произведения ()
определяет новое отношение R, которое является результатом конкатенации каждого кортежа
отношения R1 с каждым кортежем отношения R2.
Запрос SQL
Установим, что получится в результате выполнения этой операции реляционной алгебры и соответствующего ей запроса SQL. Даны два отношения R3 и R4:
R3 | R4 | |||||
A1 | A2 | A3 | A4 | A5 | A6 | |
3 | hh | yl | ms | 3 | hh | |
4 | pp | a1 | sr | 4 | pp | |
1 | rr | yl | ms |
В новом отношении должны присутствовать все атрибуты (столбцы) двух отношений. Сначала первая строка отношения R3 сцепляется с каждой из двух строк отношения R4, затем вторая строка отношения R3, затем третья. В результате должно получиться 3 Х 2 = 6 кортежей (строк). Получаем такое новое отношение:
R | |||||
A1 | A2 | A3 | A4 | A5 | A6 |
3 | hh | yl | ms | 3 | hh |
3 | hh | yl | ms | 4 | pp |
4 | pp | a1 | sr | 3 | hh |
4 | pp | a1 | sr | 4 | pp |
1 | rr | yl | ms | 3 | hh |
1 | rr | yl | ms | 4 | pp |
Операция деления
Результатом операции деления ()
является набор кортежей (строк) отношения R1, которые соответствуют комбинации всех кортежей
отношения R2. Для этого нужно, чтобы в отношении R2 была часть атрибутов (можно и один), которые есть
в отношении R1. В результирующем отношении присутствуют только те атрибуты отношения R1,
которых нет в отношении R2.
Запрос SQL
NOT EXIST (SELECT * from R6 WHERE NOT EXIST
R6.A2 = R5.A2 AND
R6.A3 = R5.A3)
Давайте посмотрим, что получится в результате выполнения этой операции реляционной алгебры и соответствующего ей запроса SQL. Даны два отношения R5 и R6:
R5 | R6 | |||||
A1 | A2 | A3 | A4 | A2 | A3 | |
2 | S3 | 4 | sun | R4 | 8 | |
3 | X8 | 7 | kab | X8 | 7 | |
3 | R4 | 8 | kab |
Комбинации всех кортежей отношения R6 соответствуют вторая и третья строки отношения R5. Но после исключения атрибутов (столбцов) А2 и А3 эти строки становятся идентичными. Поэтому в новом отношении присутствует эта строка один раз. Новое отношение:
R | |
A1 | A4 |
3 | kab |
Операция тета-соединения
В результате этой операции получается отношение, которое содержит кортежи из декартова произведения отношений R1 и R2 удовлетворяющие предикату Р. Значением предиката Р может быть один из операторов сравнения (<, <=, >, >=, = или !=).
Запрос SQL
Посмотрим, что получится в результате выполнения этой операции реляционной алгебры и соответствующего ей запроса SQL. Даны два отношения R3 и R4:
R3 | R4 | |||||
A1 | A2 | A3 | A4 | A5 | A6 | |
3 | hh | yl | ms | 3 | hh | |
4 | pp | a1 | sr | 4 | pp | |
1 | rr | yl | ms |
Это таблицы (отношения) из главы о декартовом произведении. Выполняем операцию декартового произведения. Видим, что условию предиката Р удовлетворяет один кортеж декартового произведения - первый (так как 3>=3). Получаем следующее новое отношение:
R | |||||
A1 | A2 | A3 | A4 | A5 | A6 |
3 | hh | yl | ms | 3 | hh |
Назад<<< | Листать | Вперёд>>> |
Поделиться с друзьями