Команда LEFT JOIN
Команда LEFT JOIN используется для объединения двух таблиц
по условию связи между столбцами.
Она возвращает все строки из левой таблицы
и соответствующие строки из правой таблицы.
Если для строки из левой таблицы не найдено соответствия в правой таблице,
такая строка всё равно попадёт в результат,
но значения столбцов правой таблицы будут равны NULL.
Таким образом, LEFT JOIN позволяет сохранить все данные основной таблицы,
даже если связанные данные отсутствуют.
Синтаксис
SELECT table1.column_list, table2.column_list
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name
Таблицы для примеров
| id | name |
|---|---|
| 1 | Belarus |
| 2 | Russia |
| 3 | Ukraine |
| id | name | country_id |
|---|---|---|
| 1 | Minsk | 1 |
| 2 | Vitebsk | 1 |
| 3 | Moscow | 2 |
| 4 | Vladivostok | 2 |
| 6 | London | NULL |
Пример
Давайте выберем все города и их страны, при этом города без связанной страны также будут включены в результат:
SELECT
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, используя условие после соединения:
SELECT
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 |
Пример
Давайте найдём города, для которых не существует связанной страны:
SELECT
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,
которая выбирает только совпадающие строки