ML Vault
All notes

LEFT RIGHT JOIN

LEFT JOIN — это оператор внешнего соединения, для которого важен порядок таблиц в запросе, т.е. в отличие от INNER JOIN он не является симметричным.

Результат объединения LEFT JOIN формируется следующим образом:

  • Сначала каждая строка левой таблицы сопоставляется с каждой строкой правой таблицы (происходит декартово произведение).
  • Затем для каждой объединённой строки проверяется условие соединения, указанное после оператора ON.
  • После этого все объединённые строки, для которых условие оказалось истинным, добавляются в результирующую таблицу.
  • Далее в результат добавляются те записи из левой таблицы (внимание: только из левой), для которых условие оказалось ложным и которые не вошли в соединение на предыдущем шаге. При этом для таких записей соответствующие поля из правой таблицы заполняются значениями NULL.

Если внимательно посмотреть на описанный алгоритм, то можно понять, что он легко сводится к следующей последовательности действий:

  1. Сначала в соответствии с указанным условием выполняется INNER JOIN первой и второй таблиц.
  2. Затем в результат добавляются те записи из левой таблицы (внимание: только из левой), для которых условие оказалось ложным и которые не вошли в соединение на предыдущем шаге. При этом для таких записей соответствующие поля из правой таблицы заполняются значениями NULL.

Соединение RIGHT JOIN работает аналогичным образом, только на втором этапе в результат INNER JOIN добавляются записи не из левой, а из правой таблицы.

Круги Эйлера: