Синтаксис Table1 JOIN Table2 ON <expr>
принимает любое выражение, следующее за ON
.Выражение может включать сравнения и логические термины.Выражения не обязательно должны иметь круглые скобки.
Синтаксис Table1 JOIN Table2 USING (<column-list>)
не принимает выражение, он принимает только кортеж со списком столбцов внутри скобок.Понятно, что это логически эквивалентно серии логических терминов, разделенных AND
, где каждый термин сравнивает столбец с одинаковым именем в обеих таблицах.
Table1 JOIN Table2 ON Table1.ColumnA = Table2.ColumnA
AND Table1.ColumnB = Table2.ColumnB
То же, что
Table1 JOIN Table2 USING (ColumnA, ColumnB)
Но это также то же самое, что и выражение с сравнением кортежей :
Table1 JOIN Table2 ON (Table1.ColumnA, Table1.ColumnB) = (Table2.ColumnA, Table2.ColumnB)
Сравнения кортежей требуют скобок для ясности приоритета оператора.
Теперь, когда мы видели сравнение кортежей, синтаксис USING
больше похож на сокращенную версию этого.Это для кортежа имен столбцов без квалификаторов таблицы.