Внутреннее соединение - это то же самое, что и равное соединение? - PullRequest
36 голосов
/ 29 марта 2011

Можете ли вы сказать мне, если внутреннее соединение и равное соединение одинаковы или нет?

Ответы [ 7 ]

42 голосов
/ 29 марта 2011

«Внутреннее объединение» - это не то же самое, что «равное объединение» в общих терминах.

«равное объединение» означает объединение таблиц с использованием оператора равенства или эквивалента.Я все еще назвал бы внешнее объединение «равным соединением», если оно использует только равенство (другие могут не согласиться).

«внутреннее соединение» против «внешнее соединение» и определяет, как объединить два набора при отсутствии совпадающего значения.

30 голосов
/ 29 марта 2011

Я нашел эту статью об этом, думаю, это отвечает на ваш вопрос.

Они не связаны.

Почти каждое соединение - это эквайоин, потому что условие для соответствия ряды основаны на равенстве двух значения - по одному из каждой таблицы быть присоединенным Так вот что делает это Equijoin: условие ON равенство. Это включает в себя внутренние соединения и все три типа внешних соединений.

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

Читать всю статью

7 голосов
/ 22 января 2013

Ответ НЕТ.

Равное соединение используется для сопоставления двух столбцов из двух таблиц с использованием явного оператора = :

Пример:

select *
  from table T1, table2 T2
  where T1.column_name1 = T2.column_name2

Внутреннее соединение используется для получения перекрестного произведения между двумя таблицами, объединяя все записи из обеих таблиц.Чтобы получить правильный результат, вы можете использовать равное соединение или одно естественное объединение (имена столбцов между таблицами должны быть одинаковыми)

Использование равного соединения (явное и неявное)

select *
  from table T1 INNER JOIN table2 T2
  on T1.column_name = T2.column_name

select *
  from table T1, table2 T2
  where T1.column_name = T2.column_name

Или Используя естественное соединение

select *
  from table T1 NATURAL JOIN table2 T2

HTH

6 голосов
/ 04 мая 2015

Проще говоря: Экви-соединение - это возможный тип внутренних соединений

Для более подробного объяснения:

Внутреннее объединение - это объединение, которое возвращает только строки из соединенных таблиц, в которых выполняется определенное условие. Это условие может иметь равенство, что означает, что у нас будет equi-join ; если условие не является равенством - которое может быть неравенством, большим, меньшим, чем между и т. д. - у нас есть nonequi-join , называемый более точно theta-join.

Если мы не хотим, чтобы такие условия были обязательно выполнены, мы можем иметь внешние соединения (все строки из всех таблиц возвращены), левое соединение (все строки из левой таблицы возвращается, только для правой таблицы), правое соединение (возвращены все строки из правой таблицы, только для левой таблицы).

4 голосов
/ 16 мая 2017

Ответ Нет, вот сортировка и проста для читателей.

Внутреннее объединение может иметь равенство (=) и другие операторы (например, <,>, <>) вусловие соединения.

равное соединение имеет только оператор равенства (=) в условии соединения.

равное соединение может быть внутренним соединением,Левое внешнее соединение, правое внешнее соединение

1 голос
/ 22 января 2013

Если нужно разобрать разницу, я думаю, что это так. Я проверил это с DB2. В 'equi join'. Вы должны выбрать столбец сравнения объединяемой таблицы, при внутреннем объединении это не обязательно, если вы это делаете. Пример: -

Select k.id,k.name FROM customer k
inner join  dealer on(
k.id =dealer.id
)

здесь приведенные строки представляют собой только две строки столбцов

id    name

Но я думаю, что в equi join вам нужно выбрать столбцы другой таблицы

Select k.id,k.name,d.id FROM customer k,dealer d
where
k.id =d.id

, и это приведет к появлению строк с тремя столбцами, поэтому вы не сможете найти здесь нежелательный сравниваемый столбец дилера (даже если он вам не нужен), строки будут выглядеть как

 id(from customer) name(from Customer) id(from dealer)

Может быть, это не так для вашего вопроса. Но это может быть одним из основных отличий.

0 голосов
/ 28 июня 2017

Ответ - ДА, но как результат . Итак, вот пример.

Рассмотрим три таблицы:

заказов (ord_no, purchase_amt, ord_date, customer_id, salesman_id)

покупатель (customer_id, cust_name, city, grade, salesman_id)

продавец (продавец_ид, имя, город, комиссия)

Теперь, если у меня есть такой запрос:

Найти детали заказа.

Использование внутреннего соединения:

SELECT * FROM orders a INNER JOIN customer b ON a.customer_id=b.customer_id 
INNER JOIN salesman c ON a.salesman_id=c.salesman_id;

Использование EQUI JOIN:

SELECT * FROM orders a, customer b,salesman c where 
a.customer_id=b.customer_id and a.salesman_id=c.salesman_id;

Выполнить оба запроса. Вы получите тот же результат.

Возвращаясь к вашему вопросу Нет различий в результатах эквиджоин и внутреннего соединения. Но могут быть различия во внутренних исполнениях обоих типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...