Не существует «лучшего» или «худшего» типа соединения. Они имеют разное значение и должны использоваться в зависимости от этого.
В вашем случае, вы , вероятно , не имеют сотрудников с не work_log (ни одной строки в этой таблице), так LEFT JOIN
и JOIN
будут эквивалентны в результатах. Однако, если бы у вас была такая вещь (новый сотрудник без зарегистрированного журнала work_log), то JOIN
этот сотрудник пропустил бы пустошь, в то время как при левом соединении (первая таблица которого сотрудники) показывали бы все из них, и при наличии нуля в полях из work_log не совпадают.
Опять же, производительность является второстепенной вещью для правильности запроса. Некоторые люди говорят, что вы не должны использовать LEFT JOIN
s. Это правда, что LEFT JOIN заставляет оптимизатор выполнить запрос в одном конкретном порядке, предотвращая некоторые оптимизации (переупорядочение таблиц) в некоторых случаях. Вот один пример . Но вы не должны выбирать одно из другого, если правильность / смысл жертвуются, так как ВНУТРЕННЕЕ СОЕДИНЕНИЕ не хуже по своей сути. Остальные обычные оптимизации применяются как обычно.
Таким образом, не используйте, LEFT JOIN
если вы действительно имеете в виду INNER JOIN
.
В MySQL CROSS JOIN
, INNER JOIN
и JOIN
одни и те же. В стандартном и семантическом CROSS JOIN
выражениях a - это INNER JOIN
без ON
условия, поэтому вы получаете каждую комбинацию строк между таблицами.
У вас есть примеры всех семантических типов объединения в Википедии . На практике в MySQL мы склонны писать только JOIN
и LEFT JOIN
.