Другие языки программирования и технологии

Что лучше "SELECT поля FROM таблица LEFT JOIN таблица ON условие" или...."SELECT поля FROM таблица1, таблица2 WHERE"

step, games.bets, players.money, players.id AS id_player FROM players LEFT JOIN games ON games.id = 1 Или SELECT games.step, games.bets, players.money, players.id as id_player FROM games, players WHERE games.id = 1 Если и то и то возвращает обсалютно одинаковое значение
FROM games, players, ..-это синоним INNER JOIN.
Сравнивать INNER и LEFT джоины, задаваясь вопросом "что лучше", примерно тоже самое, что сравнивать зимнюю и летнюю резину на автомобиль, задаваясь тем же вопросом. Очевидно, что на летней резине лучше ездить летом, а на зимней по гололёду зимой.
Левый джоин объединяет все записи таблицы, даже если у неё нет связи и нет значения для объединения. Иннер джоин объединяет только записи, имеющие связь по значению.

Если требуется найти элемент одной таблицы и все связанные с ним элементы другой - используем ИННЕР джоин.
Если требуется найти элементы таблицы для которых нет связанных элементов в другой - используем ЛЕВЫЙ джоин.
Если требуется найти элементы одной таблицы и опционально добавить к ним значения из другой (они могут быть, а могут и не быть) - снова используем ЛЕВЫЙ джоин.

Это разные вещи и корректно будет спрашивать "чем они отличаются", а не "что лучше. "

UPD.: в таблицах с 100 или 1000 строками левый джоин будет работать почти также как иннер. Разве что может лишнего немного вернуть. Но если объём таблицы перевалит за десяток миллионов строк и левых джоинов в одном запросе будет несколько, запрос может выполняться и по несколько минут.
Илхом Рахимов
Илхом Рахимов
5 085
Лучший ответ
Современные БД для любого запроса создают план выполнения. При помощи специальных утилит эти планы можно смотреть и анализировать. Если возникают такие вопросы, это то, что надо сделать - сравнить планы.
Кстати, приведенные запросы грешат тем, что в них нет никакого объединения таблиц - БД вернет кортезианское произведение, отфильтрованное по games.id = 1. Такие результаты крайне редко имеют смысл и указывают на неправильный дизайн БД.
Если возвращают одно и тоже, то смотрите по времени выполнения.

Несколько странный запрос. Используются две таблицы, а условие только по одной (WHERE games.id = 1), нет определены связи между таблицами