Реляционная алгебра: соединения, деление — различия между версиями
Masmirnov (обсуждение | вклад) (Деления) |
Masmirnov (обсуждение | вклад) м |
||
Строка 3: | Строка 3: | ||
{{Определение | {{Определение | ||
|definition= | |definition= | ||
− | '''Соединение''' (англ. ''Join'') — общее наименование для бинарных операторов на отношениях, позволяющих некоторым образом соединить данные из | + | '''Соединение''' (англ. ''Join'') — общее наименование для бинарных операторов на отношениях, позволяющих некоторым образом соединить данные из двух отношений в одно. |
}} | }} | ||
==Полное соединение== | ==Полное соединение== |
Версия 21:02, 14 декабря 2021
Содержание
Соединения
Определение: |
Соединение (англ. Join) — общее наименование для бинарных операторов на отношениях, позволяющих некоторым образом соединить данные из двух отношений в одно. |
Полное соединение
Определение: |
Полным, или декартовым соединением (англ. Cross join, Cartesian join) двух отношений | и , у которых нет общих атрибутов, называется отношение, в котором заголовок является объединением заголовков и , а тело — декартовым произведением тел и . Обозначение:
В случае, если у двух отношений есть хотя бы один общий атрибут в заголовке, их полное соединение не определено.
Пример
Рассмотрим два отношения:
Id1 | FirstName |
---|---|
1 | Иван |
2 | Пётр |
3 | Сидор |
Id2 | LastName |
---|---|
1 | Иванов |
3 | Петров |
4 | Сидоров |
Их полным соединением будет следующее отношение:
Id1 | FirstName | Id2 | LastName |
---|---|---|---|
1 | Иван | 1 | Иванов |
1 | Иван | 3 | Петров |
1 | Иван | 4 | Сидоров |
2 | Пётр | 1 | Иванов |
2 | Пётр | 3 | Петров |
2 | Пётр | 4 | Сидоров |
3 | Сидор | 1 | Иванов |
3 | Сидор | 3 | Петров |
3 | Сидор | 4 | Сидоров |
Естественное соединение
Определение: |
Естественным соединением (англ. Natural join) двух отношений | и называется отношение, в котором заголовок является объединением заголовков и , а тело состоит из кортежей, полученных всевозможными соединениями кортежей и , имеющих равные значения одноимённых атрибутов. Обозначение:
Пример
Рассмотрим два отношения:
Id | FirstName |
---|---|
1 | Иван |
2 | Пётр |
3 | Сидор |
Id | LastName |
---|---|
1 | Иванов |
1 | Петров |
2 | Сидоров |
Их естественным соединением будет следующее отношение:
Id | FirstName | LastName |
---|---|---|
1 | Иван | Иванов |
1 | Иван | Петров |
2 | Пётр | Сидоров |
Свойства
Замечание. Здесь и далее под теоретико-множественными операциями над отношениями (мощность отношения, включение одного отношения в другое и т.д.) будем иметь ввиду соответствующие операции над телами отношений.
- Если
- достигается, если у общих атрибутов в и нет равных значений
- достигается, в частности, при отсутствии общих атрибутов у и (в такой ситуации естественное соединение совпадает с полным: )
и , то .
Внешние соединения
Определение: |
Левым соединением (англ. Left join или Left outer join) двух отношений | и называется отношение, в котором заголовок является объединением заголовков и , а тело состоит из кортежей, полученных всевозможными соединениями кортежей и , имеющих равные значения одноимённых атрибутов. Если по одноимённым атрибутам кортежу из не соответствует ни одного кортежа из , то в результат добавляется этот кортеж из , дополненный пустыми значениями. Обозначение:
Определение: |
Правым соединением (англ. Right join или Right outer join) двух отношений | и называется отношение, в котором заголовок является объединением заголовков и , а тело состоит из кортежей, полученных всевозможными соединениями кортежей и , имеющих равные значения одноимённых атрибутов. Если по одноимённым атрибутам кортежу из не соответствует ни одного кортежа из , то в результат добавляется этот кортеж из , дополненный пустыми значениями. Обозначение:
Определение: |
Внешним соединением (англ. Outer join или Full outer join) двух отношений | и называется отношение, в котором заголовок является объединением заголовков и , а тело состоит из кортежей, полученных всевозможными соединениями кортежей и , имеющих равные значения одноимённых атрибутов. Если по одноимённым атрибутам кортежу из одного отношения не соответствует ни одного кортежа из другого, то в результат добавляется этот кортеж, дополненный пустыми значениями. Обозначение:
Пример
Рассмотрим два отношения (
и соответственно):Id | FirstName |
---|---|
1 | Иван |
2 | Пётр |
3 | Сидор |
Id | LastName |
---|---|
1 | Иванов |
1 | Петров |
3 | Сидоров |
4 | Плюшкин |
Тогда
(левое соединение) равно:Id | FirstName | LastName |
---|---|---|
1 | Иван | Иванов |
1 | Иван | Петров |
2 | Пётр | |
3 | Сидор | Сидоров |
(правое соединение) равно:
Id | FirstName | LastName |
---|---|---|
1 | Иван | Иванов |
1 | Иван | Петров |
3 | Сидор | Сидоров |
4 | Плюшкин |
(внешнее соединение) равно:
Id | FirstName | LastName |
---|---|---|
1 | Иван | Иванов |
1 | Иван | Петров |
2 | Пётр | |
3 | Сидор | Сидоров |
4 | Плюшкин |
Свойства
Непосредственно из определений вытекают следующие свойства:
Из этих свойств, в свою очередь, следует:
Полусоединения
Определение: |
Левым полусоединением (англ. Left semijoin) двух отношений | и называется отношение, в котором заголовок равен заголовку , а тело состоит из кортежей в , для которых существует кортеж из с равными значениями одноимённых атрибутов. Обозначение:
Определение: |
Правым полусоединением (англ. Right semijoin) двух отношений | и называется отношение, в котором заголовок равен заголовку , а тело состоит из кортежей в , для которых существует кортеж из с равными значениями одноимённых атрибутов. Обозначение:
Пример
Рассмотрим два отношения (
и соответственно):Id | FirstName |
---|---|
1 | Иван |
2 | Пётр |
3 | Сидор |
Id | LastName |
---|---|
1 | Иванов |
1 | Петров |
3 | Сидоров |
4 | Плюшкин |
Тогда
(левое полусоединение) равно:Id | FirstName |
---|---|
1 | Иван |
3 | Сидор |
(правое полусоединение) равно:
Id | LastName |
---|---|
1 | Иванов |
1 | Петров |
3 | Сидоров |
Свойства
Из определения следует:
Из соответствующих свойств внешних соединений следует:
Условные соединения
Определение: |
Условным соединением (англ. Conditional join) двух отношений | и , у которых нет общих атрибутов, по условию называется отношение, в котором заголовок является объединением заголовков и , а кортежами тела являются всевозможные конкатенации кортежей тел и , удовлетворяющих условию . Обозначение:
Определение: |
Левым условным соединением (англ. Left conditional join) двух отношений | и , у которых нет общих атрибутов, по условию называется отношение, в котором заголовок является объединением заголовков и , а кортежами тела являются всевозможные конкатенации кортежей тел и , удовлетворяющих условию . Если в результате кортежу из не соответствует ни одного кортежа из , то в результат добавляется этот кортеж из , дополненный пустыми значениями. Обозначение:
Определение: |
Правым условным соединением (англ. Right conditional join) двух отношений | и , у которых нет общих атрибутов, по условию называется отношение, в котором заголовок является объединением заголовков и , а кортежами тела являются всевозможные конкатенации кортежей тел и , удовлетворяющих условию . Если в результате кортежу из не соответствует ни одного кортежа из , то в результат добавляется этот кортеж из , дополненный пустыми значениями. Обозначение:
Определение: |
Внешним условным соединением (англ. Outer conditional join) двух отношений | и , у которых нет общих атрибутов, по условию называется отношение, в котором заголовок является объединением заголовков и , а кортежами тела являются всевозможные конкатенации кортежей тел и , удовлетворяющих условию . Если в результате кортежу из одного отношения не соответствует ни одного кортежа из другого, то в результат добавляется этот кортеж, дополненный пустыми значениями. Обозначение:
Пример
Рассмотрим два отношения (
и соответственно):Id1 | FirstName |
---|---|
1 | Иван |
2 | Пётр |
3 | Сидор |
Id2 | LastName |
---|---|
1 | Иванов |
1 | Петров |
3 | Сидоров |
4 | Плюшкин |
Тогда
равно:Id1 | FirstName | Id2 | LastName |
---|---|---|---|
1 | Иван | 3 | Сидоров |
1 | Иван | 4 | Плюшкин |
2 | Пётр | 3 | Сидоров |
2 | Пётр | 4 | Плюшкин |
3 | Сидор |
Свойства
Из определений следует:
- , где
- , где
- , где
Из свойств выше нетрудно вывести:
Деление
Деление
Определение: |
Пусть даны отношения | с заголовком и отношение с заголовком . Тогда делением (англ. Division) на называется максимальное по включению отношение с заголовком , такое что . Обозначение:
Определение деления в реляционной алгебре хорошо перекликается с определением деления с остатком в арифметике: «Частным от деления целого числа
на натуральное число называется максимальное целое , такое что .»Пример
Рассмотрим следующие отношения,
и соответственно:Id | FirstName |
---|---|
1 | Иван |
2 | Иван |
1 | Пётр |
2 | Пётр |
3 | Пётр |
1 | Сидор |
3 | Сидор |
Id |
---|
1 |
2 |
Тогда результатом деления
на будут такие имена (FirstName), которые в отношении ассоциированы и с , и с . Итого получим:FirstName |
---|
Иван |
Пётр |
Свойства
- — интерпретация определения на языке кванторов
- — выражение деления через простейшие операции реляционной алгебры
Большое деление
Определение: |
Пусть даны отношения | с заголовком и отношение с заголовком . Тогда большим делением (англ. Great division) на называется отношение с заголовком , такое что для каждого верно . Обозначение:
Пример
Рассмотрим следующие отношения,
и соответственно:Id | FirstName |
---|---|
1 | Иван |
2 | Иван |
1 | Пётр |
2 | Пётр |
3 | Пётр |
1 | Сидор |
3 | Сидор |
Id | LastName |
---|---|
1 | Иванов |
2 | Иванов |
1 | Петров |
3 | Сидоров |
Тогда результатом большого деления
на будет:FirstName | LastName |
---|---|
Иван | Иванов |
Пётр | Иванов |
Иван | Петров |
Пётр | Петров |
Сидор | Петров |
Пётр | Сидоров |
Сидор | Сидоров |
Объяснение:
Зафиксируем
. Отфильтровав по этому условию отношение , получим . Поделив отношение на это, получим . Поэтому в ответе есть Иван Иванов и Пётр Иванов.Зафиксируем
. Отфильтровав по этому условию отношение , получим . Поделив отношение на это, получим . Поэтому в ответе есть Иван Петров, Пётр Петров и Сидор Петров.Зафиксируем
. Отфильтровав по этому условию отношение , получим . Поделив отношение на это, получим . Поэтому в ответе есть Пётр Сидоров и Сидор Сидоров.Свойства
- — интерпретация определения на языке кванторов
- — выражение большого деления через простейшие операции реляционной алгебры
Литература
- Дейт К. Введение в системы баз данных (глава 7)
- Уидом Д., Ульман Д. Основы реляционных баз данных (главы 4 и 5)