machetero
@machetero
gotlib.me

Можно ли использовать WHERE при JOIN?

Я понимаю что запросы вида
FROM users,city WHERE users.city_id = city.id
устарели и лучше использовать джоин, однако СУБД их ещё поддерживают.
Вопрос - стоит ли отказаться полностью от такого вида запросов, тк их могут выпилить или ещё чего, или можно спокойно пользоваться таким вариантом ?
  • Вопрос задан
  • 471 просмотр
Решения вопроса 1
terrier
@terrier
Обе эти ( эквивалентные ) формы перечислены в стандарте, а процесс выпиливания из стандарта SQL таких базовых вещей занимает десятилетия. Так что на нашем веку ничего ни откуда не удалят, пишите так как считаете более читаемо.
В целом основные точки зрения на этот вопрос такие:
- Всегда писать JOIN и никаких гвоздей
- Две-три таблицы писать через запятую, для остального - JOIN понятнее
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Когда Вы пишите from table1, table2 where...
sql сначала строит декартово произведение матриц (размером count(table1)*count(table2)), а затем получившуюся огромную таблицу фильтрует.

Когда вы пишите join - sql делает фильтрацию на стадии построения декартова произведения, что существенно ускоряет процесс и уменьшает потребление памяти на запрос.

В случае если в какой то из таблиц сильно меньше релевантных записей ( к примеру у нас в базе 1 000 000 пользователей, но всего 10 000 городов) или одна из таблиц не нужна для фильтрации всего запроса (например мы ищем пользователей-женщин без учета города проживания) будет сильно быстрее убрать 2ю таблицу из запроса вообще, получив в первом запросе данные из таблицы users, выбрав на ЯП нужные id и сформировав 2й запрос в базу для получения городов.

select ... from users where user.sex = 0;
select ... from city where city_id in (...)

Imho использование from table1,table2 это признак профнепригодности (к слову как и sql_calc_found_rows хотя это к делу не относится)
Ответ написан
Ваш ответ на вопрос

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

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