Команда RIGHT JOIN
Команда RIGHT JOIN используется для объединения двух таблиц
по условию связи между столбцами.
Она возвращает все строки из правой таблицы
и соответствующие строки из левой таблицы.
Связь обычно выполняется между первичным ключом одной таблицы
и соответствующим внешним ключом другой таблицы.
Если для строки правой таблицы не найдено соответствия в левой таблице,
такая строка всё равно попадёт в результат,
но значения столбцов левой таблицы будут равны NULL.
Таким образом, RIGHT JOIN гарантирует,
что все записи правой таблицы будут присутствовать в результате,
даже если связанные записи отсутствуют.
Синтаксис
SELECT table1.column_list, table2.column_list
FROM table1
RIGHT 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
RIGHT 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 |
| NULL | NULL | 3 | Ukraine |
Пример
Давайте выберем страны с идентификатором больше или равным 2, включая страны без связанных городов:
SELECT
countries.name AS country_name,
cities.name AS city_name
FROM cities
RIGHT JOIN countries
ON countries.id = cities.country_id
WHERE countries.id >= 2
Результат выполнения кода:
| country_name | city_name |
|---|---|
| Russia | Moscow |
| Russia | Vladivostok |
| Ukraine | NULL |
Пример
Давайте найдём страны, у которых нет ни одного связанного города:
SELECT
countries.name
FROM cities
RIGHT JOIN countries
ON countries.id = cities.country_id
WHERE cities.id IS NULL
Результат выполнения кода:
| name |
|---|
| Ukraine |
Смотрите также
-
JOIN,
которая связывает таблицы по условию -
LEFT JOIN,
которая выбирает все строки левой таблицы -
INNER JOIN,
которая выбирает только совпадающие строки