Команда LEFT JOIN

Команда LEFT JOIN используется для объединения двух таблиц по условию связи между столбцами. Она возвращает все строки из левой таблицы и соответствующие строки из правой таблицы.

Если для строки из левой таблицы не найдено соответствия в правой таблице, такая строка всё равно попадёт в результат, но значения столбцов правой таблицы будут равны NULL.

Таким образом, LEFT JOIN позволяет сохранить все данные основной таблицы, даже если связанные данные отсутствуют.

Синтаксис

sqlSELECT table1.column_list, table2.column_list
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name

Таблицы для примеров

countries
id name
1 Belarus
2 Russia
3 Ukraine
cities
id name country_id
1 Minsk 1
2 Vitebsk 1
3 Moscow 2
4 Vladivostok 2
6 London NULL

Пример

Давайте выберем все города и их страны, при этом города без связанной страны также будут включены в результат:

sqlSELECT
  cities.id AS city_id,
  cities.name AS city_name,
  countries.id AS country_id,
  countries.name AS country_name
FROM cities
LEFT JOIN countries
ON countries.id = cities.country_id

Результат выполнения кода:

city_id city_name country_id country_name
1 Minsk 1 Belarus
2 Vitebsk 1 Belarus
3 Moscow 2 Russia
4 Vladivostok 2 Russia
6 London NULL NULL

Пример

Давайте выберем только города, у которых страна Russia, используя условие после соединения:

sqlSELECT
  cities.name AS city_name,
  countries.name AS country_name
FROM cities
LEFT JOIN countries
ON countries.id = cities.country_id
WHERE countries.name = 'Russia'

Результат выполнения кода:

city_name country_name
Moscow Russia
Vladivostok Russia

Пример

Давайте найдём города, для которых не существует связанной страны:

sqlSELECT
  cities.name
FROM cities
LEFT JOIN countries
ON countries.id = cities.country_id
WHERE countries.id IS NULL

Результат выполнения кода:

name
London

Смотрите также

  • JOIN,
    которая связывает таблицы по условию
  • RIGHT JOIN,
    которая выбирает все строки правой таблицы
  • INNER JOIN,
    которая выбирает только совпадающие строки