В чем разница между естественным соединением и внутренним соединением?
Разница между естественным соединением и внутренним соединением
Ответ 1
Одним из существенных различий между INNER JOIN и NATURAL JOIN является количество возвращаемых столбцов.
Рассмотрим:
TableA                           TableB
+------------+----------+        +--------------------+    
|Column1     | Column2  |        |Column1  |  Column3 |
+-----------------------+        +--------------------+
| 1          |  2       |        | 1       |   3      |
+------------+----------+        +---------+----------+
INNER JOIN таблиц A и TableB в столбце 1 вернется
SELECT * FROM TableA AS a INNER JOIN TableB AS b USING (Column1);
SELECT * FROM TableA AS a INNER JOIN TableB AS b ON a.Column1 = b.Column1;
+------------+-----------+---------------------+    
| a.Column1  | a.Column2 | b.Column1| b.Column3|
+------------------------+---------------------+
| 1          |  2        | 1        |   3      |
+------------+-----------+----------+----------+
NATURAL JOIN таблиц A и TableB в столбце 1 вернется:
SELECT * FROM TableA NATURAL JOIN TableB
+------------+----------+----------+    
|Column1     | Column2  | Column3  |
+-----------------------+----------+
| 1          |  2       |   3      |
+------------+----------+----------+
Повторяющийся столбец исключается.
(AFAICT из стандартной грамматики, вы не можете указать соединяющиеся столбцы в естественном соединении; объединение строго основано на имени. См. также Википедия.)
(Там есть чит во внутреннем соединении; части a. и b. не будут в именах столбцов; у вас просто будут заголовки column1, column2, column1, column3].)
Ответ 2
- Внутреннее соединение - это то, где соответствующая строка в объединенной таблице требуется для возврата строки из первой таблицы.
- Внешнее соединение - это такое, в котором соответствующая строка в объединенной таблице не требуется для строки из первой таблицы, которая будет возвращена
-  Естественное объединение - это объединение (вы можете иметь natural leftилиnatural right), которое предполагает, что критерии объединения находятся там, где совпадают столбцы с одинаковыми именами в обеих таблицах.
Я бы не использовал естественные объединения, такие как чума, потому что естественные объединения:
-  нестандартный sql [SQL 92] ипоэтому непереносимый, не особо читаемый (большинством кодеров SQL) и, возможно, не поддерживаемый различными инструментами/библиотеками
- неинформативно; Вы не можете сказать, к каким столбцам присоединяются, не обращаясь к схеме
- Ваши условия соединения незаметно уязвимы для изменений схемы - если имеется несколько столбцов естественного объединения и один такой столбец удален из таблицы, запрос все равно будет выполнен, но, вероятно, не правильно, и это изменение в поведении будет молчать
- вряд ли стоит усилий; вы экономите только около 10 секунд ввода
Ответ 3
Естественное объединение - это просто ярлык, позволяющий избежать ввода, при условии, что объединение простое и соответствует полям с одинаковыми именами.
SELECT
  *
FROM
  table1
NATURAL JOIN
  table2
    -- implicitly uses 'room_number' to join
Такой же как...
SELECT
  *
FROM
  table1
INNER JOIN
  table2
    ON table1.room_number = table2.room_number
Однако то, что вы не можете сделать с форматом ярлыков, это более сложные объединения...
SELECT
  *
FROM
  table1
INNER JOIN
  table2
    ON (table1.room_number = table2.room_number)
    OR (table1.room_number IS NULL AND table2.room_number IS NULL)
Ответ 4
SQL не верен реляционной модели во многих отношениях. Результат запроса SQL не является отношением, поскольку он может содержать столбцы с дублирующимися именами, "анонимными" (безымянными) столбцами, дублирующимися строками, нулевыми значениями и т.д. SQL не рассматривает таблицы как отношения, поскольку полагается на порядок столбцов и т.д.
 Идея NATURAL JOIN в SQL состоит в том, чтобы упростить процесс верности реляционной модели. Результат NATURAL JOIN двух таблиц будет иметь дубликаты столбцов по имени, следовательно, нет анонимных столбцов. Аналогично, UNION CORRESPONDING и EXCEPT CORRESPONDING предоставляются для устранения зависимости SQL от упорядочения столбцов в устаревшем синтаксисе UNION.
 Однако, как и во всех методах программирования, требуется дисциплина, чтобы быть полезной. Одним из требований успешного NATURAL JOIN является постоянное именование столбцов, поскольку объединения подразумеваются для столбцов с одинаковыми именами (обидно, что синтаксис для переименования столбцов в SQL является многословным, но побочным эффектом является поощрение дисциплины при именовании столбцов в базе данных). таблицы и VIEW :)
 Обратите внимание, что SQL NATURAL JOIN является равноправным соединением **, однако это не является препятствием для полезности. Учтите, что если бы NATURAL JOIN был единственным типом соединения, поддерживаемым в SQL, он все равно был бы завершен по отношению.
 Хотя действительно верно, что любое NATURAL JOIN может быть написано с использованием INNER JOIN и проекции (SELECT), также верно, что любое INNER JOIN может быть написано с использованием продукта (CROSS JOIN) и ограничения (WHERE); далее отметим, что NATURAL JOIN между таблицами без общих имен столбцов даст тот же результат, что и CROSS JOIN. Поэтому, если вас интересуют только результаты, которые являются отношениями (а почему нет?!), тогда NATURAL JOIN - единственный тип соединения, который вам нужен. Конечно, это правда, что с точки зрения языкового дизайна такие сокращения, как INNER JOIN и CROSS JOIN имеют свою ценность, но также учитывают, что почти любой SQL-запрос может быть написан 10 синтаксически различными, но семантически эквивалентными способами, и именно это делает SQL оптимизаторы очень сложно разрабатывать.
Вот несколько примеров запросов (использующих обычные базы данных запчастей и поставщиков), которые семантически эквивалентны:
SELECT *
  FROM S NATURAL JOIN SP;
-- Must disambiguate and 'project away' duplicate SNO attribute
SELECT S.SNO, SNAME, STATUS, CITY, PNO, QTY
  FROM S INNER JOIN SP 
          USING (SNO);                        
-- Alternative projection
SELECT S.*, PNO, QTY
  FROM S INNER JOIN SP 
          ON S.SNO = SP.SNO;
-- Same columns, different order == equivalent?!
SELECT SP.*, S.SNAME, S.STATUS, S.CITY
  FROM S INNER JOIN SP 
      ON S.SNO = SP.SNO;
-- 'Old school'
SELECT S.*, PNO, QTY
  FROM S, SP 
 WHERE S.SNO = SP.SNO;
** Реляционное естественное соединение - это не эквиджоин, а проекция одного. - Филипп
Ответ 5
A NATURAL join - это просто короткий синтаксис для конкретного объединения INNER - или "equi-join" - и, как только синтаксис разворачивается, обе представляют собой одну и ту же операцию реляционной алгебры. Это не "разный вид" соединения, как в случае с OUTER (LEFT/RIGHT) или CROSS.
Смотрите раздел equi-join в Википедии:
Естественное соединение предлагает дополнительную специализацию equi-joins. Предикат соединения возникает неявно, сравнивая все столбцы в обеих таблицах, которые имеют одинаковые имена столбцов в связанных таблицах. Полученная объединенная таблица содержит только один столбец для каждой пары одинаково названных столбцов.
Большинство экспертов согласны с тем, что NATURAL JOINs опасны и, следовательно, сильно препятствуют их использованию. Опасность возникает из-за непреднамеренного добавления нового столбца, названного так же, как и другой столбец...
То есть все объединения NATURAL могут быть записаны как INNER join (но обратное неверно). Для этого просто создайте предикат в явном виде - например. USING или ON - и, как указал Джонатан Леффлер, выберите желаемые столбцы с результатами, чтобы избежать "дубликатов", если это необходимо.
Счастливое кодирование.
(Ключевое слово NATURAL также может применяться к объединениям LEFT и RIGHT, и то же самое относится. Соединение NATURAL LEFT/RIGHT - это просто короткий синтаксис для конкретного объединения LEFT/RIGHT.)
Ответ 6
Natural Join: это комбинированный или комбинированный результат всех столбцов в двух таблицах. Он вернет все строки первой таблицы относительно второй таблицы.
Inner Join: это соединение будет работать, если только любое имя столбца не должно быть sxame в двух таблицах
Ответ 7
A Natural Join - это то, где две таблицы объединены на основе всех общих столбцов.
общий столбец: это столбец с одинаковым именем в обеих таблицах + имеет совместимые типы данных в обеих таблицах. Вы можете использовать только = operator
A Inner Join - это место, где две таблицы объединены на основе общих столбцов, упомянутых в предложении ON.
общий столбец: это столбец, который имеет совместимые типы данных в обеих таблицах, но не должен иметь одинаковое имя.
Вы можете использовать только любой оператор сравнения, например =, <=, >=, <, >, <>
Ответ 8
разница заключается в том, что int внутреннее (equi/default) соединение и естественное соединение, которое в общем вызове natuarl join будет отображаться за один раз, но inner/equi/default/simple join, общий столбец будет отображаться дважды.
Ответ 9
Внутреннее соединение и естественное соединение почти одинаковы, но между ними существует небольшая разница. Разница в естественном соединении не требует указания условия, но условие внутреннего соединения является обязательным. Если мы укажем условие во внутреннем соединении, то результирующие таблицы будут выглядеть как декартово.
Ответ 10
mysql> SELECT  * FROM tb1 ;
+----+------+
| id | num  |
+----+------+
|  6 |   60 |
|  7 |   70 |
|  8 |   80 |
|  1 |    1 |
|  2 |    2 |
|  3 |    3 |
+----+------+
6 rows in set (0.00 sec)
mysql> SELECT  * FROM tb2 ;
+----+------+
| id | num  |
+----+------+
|  4 |   40 |
|  5 |   50 |
|  9 |   90 |
|  1 |    1 |
|  2 |    2 |
|  3 |    3 |
+----+------+
6 rows in set (0.00 sec)
INNER JOIN:
mysql> SELECT  * FROM tb1 JOIN tb2 ; 
+----+------+----+------+
| id | num  | id | num  |
+----+------+----+------+
|  6 |   60 |  4 |   40 |
|  7 |   70 |  4 |   40 |
|  8 |   80 |  4 |   40 |
|  1 |    1 |  4 |   40 |
|  2 |    2 |  4 |   40 |
|  3 |    3 |  4 |   40 |
|  6 |   60 |  5 |   50 |
|  7 |   70 |  5 |   50 |
|  8 |   80 |  5 |   50 |
.......more......
return 36 rows in set (0.01 sec) 
AND NATURAL JOIN :
    mysql> SELECT  * FROM tb1 NATURAL JOIN tb2 ;
    +----+------+
    | id | num  |
    +----+------+
    |  1 |    1 |
    |  2 |    2 |
    |  3 |    3 |
    +----+------+
    3 rows in set (0.01 sec)
Ответ 11
Внутреннее соединение, присоедините две таблицы, где имя столбца такое же.
Естественное объединение, присоедините две таблицы, где имена столбцов и типы данных одинаковы.
