Ответ 1
Помимо синтаксиса, для небольшого фрагмента они работают точно так же. Но если это вообще возможно, всегда пишите новые запросы, используя ANSI-JOINs.
Что касается семантического обозначения, то запятая используется для создания продукта CARTESIAN между двумя таблицами, что означает получение матрицы всех записей из таблицы A со всеми записями из таблицы B, поэтому две таблицы с 4 и 6 записями соответственно вызывают 24 записей. Используя предложение WHERE, вы можете выбрать нужные вам строки из этого декартова продукта. Однако MySQL фактически не выполняет и не делает эту огромную матрицу, но семантически это то, что она означает.
Синтаксис JOIN - это стандарт ANSI, который более четко определяет, как взаимодействуют таблицы. Помещая предложение ON
рядом с JOIN
, он дает понять, что связывает две таблицы вместе.
Функционально они будут выполнять то же самое для ваших двух запросов. Разница возникает, когда вы начинаете использовать другие типы [OUTER]
JOIN.
Для MySQL специально для запятой имеет одну разницу
STRAIGHT_JOIN похож на JOIN, за исключением того, что левая таблица всегда считывается перед правой таблицей. Это может быть использовано для тех (нескольких) случаев, для которых оптимизатор объединения помещает таблицы в неправильный порядок.
Тем не менее, он не был бы разумным для банка по этой разнице.