Команда RIGHT JOIN

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

Связь обычно выполняется между первичным ключом одной таблицы и соответствующим внешним ключом другой таблицы. Если для строки правой таблицы не найдено соответствия в левой таблице, такая строка всё равно попадёт в результат, но значения столбцов левой таблицы будут равны NULL.

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

Синтаксис

sqlSELECT table1.column_list, table2.column_list
FROM table1
RIGHT 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
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, включая страны без связанных городов:

sqlSELECT
  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

Пример

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

sqlSELECT
  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,
    которая выбирает только совпадающие строки