В чем разница между двумя нотациями объединения SQL? - PullRequest
6 голосов
/ 24 ноября 2011

SQL 1: select * from t1 join t2 on t1.f1 = t2.f2

SQL 2: select * from t1,t2 where t1.f1 = t2.f2

Результаты, которые они возвращают, совпадают. Есть ли различия между ними? Например, в том, как их выполняет СУБД или в плане запросов?

Ответы [ 4 ]

11 голосов
/ 24 ноября 2011

Операционная разница между двумя запросами отсутствует.

Тем не менее, явная нотация соединения - лучший стиль для изучения и использования; оставьте другой для (пока не изменившегося) устаревшего кода.

6 голосов
/ 24 ноября 2011

Один - это старый стиль, а другой - новый (ANSI) стиль. Основная причина, по которой я обнаружил, что вы захотите использовать новый стиль, заключается в стандартной поддержке внешних объединений. В старом стиле внешние соединения зависят от поставщика. Новый стиль имеет стандарт:

select * from t1 left outer join t2 on t1.f1 = t2.f2

В вашем примере SQL 1 - это новый, а SQL 2 - старый стиль, кстати.

1 голос
/ 24 ноября 2011

Два семантически эквивалентны (среди других вариаций на тему). Одно из отличий состоит в том, что многие пользователи Stackoverflow очень красноречиво выражают свою нетерпимость к внутренним объединениям «старого стиля» (ваш SQL 2) до такой степени, что любой, кто публикует их, рискует быть опровергнутым в дополнение к предостережению в комментариях. Вы также, вероятно, увидите примененный термин «анти-паттерн», что является бессмыслицей. Я не сталкивался с такой непереносимостью стиля вне сообщества SO. Фактически, внутренние объединения «старого стиля» очень распространены в литературе по SQL.

1 голос
/ 24 ноября 2011

По сути, нет никакой разницы между двумя запросами в действии.

Однако оба имеют одинаковый план выполнения и имеют одинаковую стоимость, что означает, что выполнение обоих запросов занимает одинаковое время (одинаковая производительность).

Использование оператора соединения - современный способ.

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