Подтвердить что ты не робот

Разница между тета-объединением, equijoin и естественным соединением

У меня возникают проблемы с пониманием реляционной алгебры, когда речь идет о соединениях тета, equijoins и естественных объединениях. Может кто-то, пожалуйста, помогите мне лучше понять это? Если я использую знак = в тета-соединении, то это точно так же, как просто использование естественного объединения?

4b9b3361

Ответ 1

Тета-объединение допускает произвольные отношения сравнения (такие как & ge;).

Equijoin является тета-объединением с использованием оператора равенства.

Естественное объединение - это equijoin для атрибутов, которые имеют одинаковое имя в каждой связи.

Кроме того, естественное объединение удаляет повторяющиеся столбцы, участвующие в сравнении равенства, поэтому остается только 1 из каждого сравниваемого столбца; в грубых реляционных алгебраических терминах: ⋈ = πR,S-as ○ ⋈aR=aS

Ответ 2

Хотя ответы, объясняющие точные различия, хороши, я хочу показать, как реляционная алгебра преобразуется в SQL и какова фактическая ценность этих трех понятий.

Ключевой концепцией в вашем вопросе является идея объединения. Чтобы понять соединение, вам нужно понять декартовский продукт (пример основан на SQL, где эквивалент называется перекрестным объединением как oneday, когда указывает);

Это не очень полезно на практике. Рассмотрим этот пример.

Product(PName, Price)
====================
Laptop,   1500
Car,      20000
Airplane, 3000000


Component(PName, CName, Cost)
=============================
Laptop, CPU,    500
Laptop, hdd,    300
Laptop, case,   700
Car,    wheels, 1000

Декартово произведение продукта x Компонент будет - ниже или sql скрипт. Вы можете видеть, что есть 12 рядов = 3 x 4. Очевидно, что строки, такие как "Ноутбук" с "колесами", не имеют смысла, поэтому на практике декартово произведение редко используется.

|    PNAME |   PRICE |  CNAME | COST |
--------------------------------------
|   Laptop |    1500 |    CPU |  500 |
|   Laptop |    1500 |    hdd |  300 |
|   Laptop |    1500 |   case |  700 |
|   Laptop |    1500 | wheels | 1000 |
|      Car |   20000 |    CPU |  500 |
|      Car |   20000 |    hdd |  300 |
|      Car |   20000 |   case |  700 |
|      Car |   20000 | wheels | 1000 |
| Airplane | 3000000 |    CPU |  500 |
| Airplane | 3000000 |    hdd |  300 |
| Airplane | 3000000 |   case |  700 |
| Airplane | 3000000 | wheels | 1000 |

ПРИСОЕДИНЯЮТСЯ, чтобы добавить больше ценности к этим продуктам. Мы действительно хотим "присоединить" продукт к связанным с ним компонентам, потому что каждый компонент принадлежит продукту. Способ сделать это - соединить:

Продукт JOIN Component ON Pname

Соответствующий SQL-запрос будет таким (вы можете играть со всеми примерами здесь)

SELECT *
FROM Product
JOIN Component
  ON Product.Pname = Component.Pname

и результат:

|  PNAME | PRICE |  CNAME | COST |
----------------------------------
| Laptop |  1500 |    CPU |  500 |
| Laptop |  1500 |    hdd |  300 |
| Laptop |  1500 |   case |  700 |
|    Car | 20000 | wheels | 1000 |

Обратите внимание, что результат имеет только 4 строки, потому что у ноутбука есть 3 компонента, у автомобиля 1, а у самолета нет. Это гораздо более полезно.

Возвращаясь к вашим вопросам, все соединения, о которых вы спрашиваете, являются вариантами JOIN, которые я только что показал:

Природный Присоединиться= соединение (предложение ON) выполняется во всех столбцах с тем же именем; он удаляет повторяющиеся столбцы из результата, в отличие от всех других объединений; большинство СУБД (системы баз данных, созданные различными поставщиками, такими как Microsoft SQL Server, Oracle MySQL и т.д.) даже не поддерживают это, это просто плохая практика (или намеренно ее не использовать). Представьте, что появляется разработчик и меняет имя второго столбца в разделе "Продукт от цены до стоимости". Тогда все естественные объединения будут выполняться по PName AND on Cost, что приведет к 0 строкам, поскольку числа не совпадают.

Theta Join= это общее соединение, которое использует каждый пользователь, потому что он позволяет вам указать условие (предложение ON в SQL). Вы можете присоединиться практически ко всем состояниям, которые вам нравятся, например, к продуктам, которые имеют первые 2 буквы, похожие или имеют другую цену. На практике это редко случается - в 95% случаев вы присоединяетесь к условию равенства, что приводит нас к:

Equi Join= наиболее распространенный, используемый на практике. Приведенный выше пример представляет собой объединение equi. Базы данных оптимизированы для этого типа объединений! Опозитом равноединенного объединения является объединение без equi, т.е. Когда вы присоединяетесь к условию, отличному от "=". Базы данных для этого не оптимизированы! Оба они являются подмножествами общего тета-соединения. Естественное объединение также является тета-объединением, но условие (theta) неявно.

Источник информации: университет + сертифицированный разработчик SQL Server + недавно завершил MOO "Введение в базы данных" из Стэнфорда, поэтому я осмелюсь сказать, что у меня есть реляционная алгебра в виду.

Ответ 3

@outis ответ хорош: краткий и правильный в отношении отношений.

Однако ситуация немного сложнее в отношении SQL.

Рассмотрим обычную поставщиков и базу данных деталей, но реализована в SQL:

SELECT * FROM S NATURAL JOIN SP;

вернет набор результатов ** с столбцами

SNO, SNAME, STATUS, CITY, PNO, QTY

Соединение выполняется в столбце с тем же именем в обеих таблицах, SNO. Обратите внимание, что набор результатов имеет шесть столбцов и содержит только один столбец для SNO.

Теперь рассмотрим тета eqijoin, где имена столбцов для соединения должны быть явно указаны (необходимы переменные диапазона S и SP):

SELECT * FROM S JOIN SP ON S.SNO = SP.SNO;

Набор результатов будет содержать семь столбцов, включая два столбца для SNO. Имена набора результатов - это то, что стандарт SQL означает "зависимый от реализации", но может выглядеть так:

SNO, SNAME, STATUS, CITY, SNO, PNO, QTY

или, возможно, это

S.SNO, SNAME, STATUS, CITY, SP.SNO, PNO, QTY

Другими словами, NATURAL JOIN в SQL можно считать удалением столбцов с дублируемыми именами из набора результатов (но, увы, не будет удалять повторяющиеся строки - вы должны помнить об изменении SELECT до SELECT DISTINCT самостоятельно).


** Я не совсем понимаю, что такое результат SELECT * FROM table_expression;. Я знаю, что это не отношение, потому что среди других причин он может иметь столбцы с повторяющимися именами или столбец без имени. Я знаю, что это не набор, потому что, помимо других причин, порядок столбцов является значительным. Это даже не табличное выражение SQL или SQL. Я называю это набором результатов.

Ответ 4

Естественное - это подмножество Equi, которое является подмножеством Тэта.

Если я использую знак = на объединении тета, это точно так же, как просто используя естественное соединение.

Не обязательно, но это будет Equi. Естественное означает, что вы сопоставляетесь со всеми одинаково названными столбцами. Equi просто означает, что вы используете исключительно "=" (а не "меньше", например, и т.д.)

Это чистая наука, хотя вы можете работать с реляционными базами данных годами и никогда не услышать, чтобы кто-либо использовал эти условия.

Ответ 5

Тета Присоединиться: Когда вы делаете запрос на объединение, используя любой оператор (например, =, & lt;,>,> = и т.д.), Тогда этот запрос на присоединение попадает под тета-соединение.

Equi Присоединиться: Когда вы создаете запрос на объединение, используя только оператор равенства, этот запрос присоединяется к Equi join.

Пример:

> SELECT * FROM Emp JOIN Dept ON Emp.DeptID = Dept.DeptID;
> SELECT * FROM Emp INNER JOIN Dept USING(DeptID)
This will show:
 _________________________________________________
| Emp.Name | Emp.DeptID | Dept.Name | Dept.DeptID |
|          |            |           |             |

Примечание: Equi join также является тета-соединением!

Natural Join: тип Equi Join, который происходит неявно, сравнивая все столбцы с одинаковыми именами в обеих таблицах.

Примечание: здесь результат объединения имеет только один столбец для каждой пары столбцов с одинаковыми именами.

Пример

 SELECT * FROM Emp NATURAL JOIN Dept
This will show:
 _______________________________
| DeptID | Emp.Name | Dept.Name |
|        |          |           |

Ответ 6

Theta join допускает произвольные отношения сравнения.

Equijoin является тета-объединением с использованием оператора равенства.

Ответ 7

Декартово произведение двух таблиц дает все возможные комбинации кортежей, как пример в математике, кросс-произведение двух множеств. так как много раз есть некоторые значения нежелательной почты, которые занимают лишнее пространство в памяти, так что здесь объединяется поиск, который дает комбинацию только тех значений атрибутов, которые требуются и имеют смысл.

Внутреннее соединение

дает повторяющееся поле в таблице дважды, тогда как естественное соединение здесь решает проблему, просто фильтруя повторяющиеся столбцы и отображая ее только один раз. естественное соединение более эффективно, так как оно сохраняет память. Кроме того, увольнения удаляются в естественном соединении.

equi объединение двух таблиц таково, что они отображают только те кортежи, которые соответствуют значению в другой таблице. например: пусть new1 и new2 будут двумя таблицами. если sql-запрос выбирает * из new1 join new2 на new1.id = new.id(id - тот же столбец в двух таблицах), то начинайте с таблицы new2 и присоединяйте, что соответствует идентификатору во второй таблице. кроме того, non equi join не имеют оператора равенства, у которого есть <, > и между оператором.

theta join состоит из всего оператора сравнения, включающего в себя равенство и другие, > оператор сравнения. когда он использует оператор равенства (=), он известен как equi join.

Ответ 8

Natural Join: естественное соединение может быть возможным, если в двух отношениях есть хотя бы один общий атрибут.

Theta Join: Theta join может быть возможным, когда два действуют на конкретное условие.

Equi Join: Equi может быть возможным, если два действуют на состояние акционерного капитала. Это один тип тета-соединения.