Я оспариваю вводное утверждение и считаю, что "использование синтаксиса" МЕНЬШЕ "чисто".Даже если есть общие имена для объединения, а естественное объединение «скрывает» «дублированное имя столбца», производная таблица может содержать столбцы с одинаковыми именами (например, «короткое имя», показанное ниже, которое существует в обоих, но не существует).часть объединения).
Кроме того, если в «использовании объединения» указаны оба столбца, возвращаются оба столбца, даже если они имеют одинаковое имя столбца.
Для нескольких дополнительных символовв синтаксисе соединения вы получаете гораздо более точный (и гибкий) подход, который можно использовать в любом запросе, не требуя специальных условий модели данных.Я также утверждаю, что синтаксическая согласованность использования объединений в стиле ON приводит к меньшей изменчивости и, следовательно, упрощению обслуживания.
SQL Fiddle
Настройка схемы Oracle 11g R2 :
CREATE TABLE COUNTRIES
(COUNTRY varchar2(9), ISOCODE varchar2(3), SHORTNAME varchar2(4))
;
INSERT ALL
INTO COUNTRIES (COUNTRY, ISOCODE, SHORTNAME)
VALUES ('Aruba', 'ABW', NULL)
INTO COUNTRIES (COUNTRY, ISOCODE, SHORTNAME)
VALUES ('Australia', 'AUS', 'Oz')
INTO COUNTRIES (COUNTRY, ISOCODE, SHORTNAME)
VALUES ('Austria', 'AUT', NULL)
SELECT * FROM dual
;
CREATE TABLE CITIES
(ISOCODE varchar2(3), CITY varchar2(9), SHORTNAME varchar2(3))
;
INSERT ALL
INTO CITIES (ISOCODE, CITY, SHORTNAME)
VALUES ('AUS', 'Melbourne', 'Mel')
SELECT * FROM dual
;
Запрос 1 :
select * from countries join cities using (ISOCODE)
Результаты :
| ISOCODE | COUNTRY | SHORTNAME | CITY | SHORTNAME |
|---------|-----------|-----------|-----------|-----------|
| AUS | Australia | Oz | Melbourne | Mel |
Запрос 2 :
select * from countries join cities using (ISOCODE,ISOCODE)
Результаты :
| ISOCODE | ISOCODE | COUNTRY | SHORTNAME | CITY | SHORTNAME |
|---------|---------|-----------|-----------|-----------|-----------|
| AUS | AUS | Australia | Oz | Melbourne | Mel |
Запрос 3 :
select * from countries left join cities using (ISOCODE)
Результаты :
| ISOCODE | COUNTRY | SHORTNAME | CITY | SHORTNAME |
|---------|-----------|-----------|-----------|-----------|
| AUS | Australia | Oz | Melbourne | Mel |
| AUT | Austria | (null) | (null) | (null) |
| ABW | Aruba | (null) | (null) | (null) |
Запрос 4 :
select * from countries left join cities using (ISOCODE,ISOCODE)
Результаты :
| ISOCODE | ISOCODE | COUNTRY | SHORTNAME | CITY | SHORTNAME |
|---------|---------|-----------|-----------|-----------|-----------|
| AUS | AUS | Australia | Oz | Melbourne | Mel |
| AUT | AUT | Austria | (null) | (null) | (null) |
| ABW | ABW | Aruba | (null) | (null) | (null) |