Условия соединения, средний SQL - PullRequest
0 голосов
/ 05 апреля 2020

В чем разница между условиями соединения "on" и "using", если оба используются для выбора указанных столбцов?

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Основное отличие от using состоит в том, что столбцы для join должны иметь одинаковые имена. Как правило, это хорошая практика в модели данных.

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

Удобной функцией является то, что общие столбцы, используемые для join, удаляются при использовании select *. Таким образом,

select *
from a join
     b
     on a.x = b.x

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

select *
from a join
     b
     using (x)

Конечно, другие столбцы могут дублироваться.

Для внешнего объединения значение равно не NULL значение, если есть. Это становится очень удобным для full join s:

select *
from a full join
     b
     using (x) full join
     c
     using (x);

Из-за значений null выражение без using довольно громоздко:

select *
from a full join
     b
     on b.x = a.x full join
     c
     on c.x = coalesce(a.x, b.x);
0 голосов
/ 05 апреля 2020

using - это просто короткое замыкание на express условие соединения, когда связанные столбцы имеют одинаковые имена.

Рассмотрим следующий пример:

select ...
from orders o
inner join order_items oi on oi.order_id = o.order_id

Это может сокращается до using следующим образом:

select ...
from orders o
inner join order_items oi using(order_id)

Примечания:

  • это также работает при объединении нескольких столбцов с одинаковыми именами

  • скобки обязательны для заполнения using

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