Основное отличие от 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);