2015-08-22 3 views
0

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

SELECT ,table1.a , table2.b , FROM table1,table2 ... 
+4

Это разные синтаксисы для одной и той же вещи, см. Https://stackoverflow.com/questions/894490/sql-left-join-vs-multiple-tables-on-from-line – augurar

ответ

1

A JOIN позволяет вернуть все или выбранные данные из нескольких таблиц в одну временную таблицу , Использование одиночных команд SELECT в таблице оставило бы вас с несколькими наборами данных, а не с одним источником.

4

Синтаксис, который вы показали, фактически является объединением. Он называется неявным соединением. Синтаксис join называется Явные, и имеет тот же эффект, с несколькими преимуществами:

  1. Это стандарт, ANSI, способ делать вещи
  2. Как говорит название, это явное - проще понять, где находится соединение, и отделить условия соединения (в предложении on) от логических условий.
  3. Легче указать разные типы соединений (внутренний/внешний/крест), которые некоторые базы данных могут не допускать в неявной форме, по крайней мере, не со стандартным синтаксисом.
+0

лучше ответьте там Mureinik +1 –

0

запятая еще до явного ПРИСОЕДИНЯЙСЯ синтаксиса. Это кросс-соединение двух таблиц: все возможные комбинации строк из каждого. ГДЕ содержит только строки, которые соответствуют его условию. Учитывая запятую и ГДЕ и вложенные SELECTS, альтернативная орфография CROSS JOIN и JOIN в другом условии в ON не нужна.

Однако ВЗАИМОДЕЙСТВУЮЩИЕ ПРИСОЕДИНИТЕСЬ В результате выполнения условия приводят к тому, что строки из запятой плюс WHERE-подобная рестилирование соответствуют строкам, удовлетворяющим условию плюс непревзойденные строки из левой таблицы (LEFT JOIN), правой таблицы (RIGHT JOIN) или оба (FULL JOIN) расширены с помощью строки NULL для столбцов из другой таблицы. Для этого требуется указать условие соответствия (определение непревзойденных строк, в которые NULL добавляются к перекрестному соединению, которое запятая дает) отдельно от более позднего ограничения через WHERE.

Но до тех пор, пока условие ВКЛЮЧЕНО для ВЕРХНИХ ОБЪЕДИНЕНИЙ, можно также разрешить его для внутренних соединений. Он дает тот же результат, что и внешнее соединение ON, условие возвращает меньше любых несогласованных строк. То же самое, что и перекрестное присоединение (например, ГДЕ), ограничивающее условие. So (INNER) JOIN - это запятая с ее собственным условием от ON, а CROSS JOIN - запятая без ON. (CROSS JOIN подобен (ВНУТРЕННИЙ) РЕГИСТРИРУЙТЕСЬ ON 1 = 1.) (Также запятая имеет более низкий приоритет, то явно не-запятая присоединяется.)

TL; DR Разделенными является низким старшинство РЕГИСТРИРУЙТЕСЬ; мы не необходимо явный INNER JOIN или ON; ВНУТРЕННИЕ СОБЫТИЯ нуждаются в отличии от ГДЕ; мы могли бы также добавить явный внутренний синтаксис JOIN ON.

Смежные вопросы