@alex_litv

В чем различие 2х запросов?

Помогите понять, что делает второй запрос.
Первый, как я понял, выводит все совпадения id таблиц а и b.
А второй не могу понять.
1.SELECT * FROM a, b WHERE a.id=b.a_id;
2. SELECT * FROM a JOIN b ON a.id=b.a_id;
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Akina
Сетевой и системный админ, SQL-программист.
Основное различие в том, что первый использует картезианское произведение с отбором, что давно уже считается bad practice.

В остальном именно эти два запроса абсолютно эквивалентны с точностью до порядка выполнения. Операция "запятая" имеет приоритет ниже, чем операция JOIN, т.е. в первом запросе выполняется неявное STRAIGHT_JOIN. И если СУБД не умеет наплевать на это, первый запрос может порождать неоптимальный план выполнения даже при актуальной статистике данных.

В более сложных запросах использование запятой, особенно в комбинации с JOIN, вообще способно полностью поломать запрос, вплоть до синтаксической некорректности. А потому настоятельно рекомендуется вместо запятой использовать CROSS JOIN.
Ответ написан
Комментировать
rozhnev
@rozhnev Куратор тега SQL
Fullstack programmer, DBA, медленно, дорого
Результат этих запросов идентичен, однако Вам следует использовать JOIN следуя современным стандартам SQL.
Статья по теме
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы