Команда INNER JOIN

Команда INNER JOIN используется для объединения строк из двух таблиц на основе условия связи между столбцами. Связь обычно выполняется между PRIMARY KEY одной таблицы и соответствующим FOREIGN KEY другой таблицы.

При выполнении INNER JOIN база данных сравнивает значения указанных столбцов в обеих таблицах. В результат попадают только те строки, для которых найдено совпадение в обеих таблицах.

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

Синтаксис

sqlSELECT table1.column_list, table2.column_list
FROM table1
INNER 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

Пример

Давайте свяжем таблицы cities и countries по полям country_id и id, чтобы получить только те города, для которых существует связанная страна:

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

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

city_id city_name country_name
1 Minsk Belarus
2 Vitebsk Belarus
3 Moscow Russia
4 Vladivostok Russia

Пример

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

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

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

city_id city_name country_id country_id_ref country_name
1 Minsk 1 1 Belarus
2 Vitebsk 1 1 Belarus
3 Moscow 2 2 Russia
4 Vladivostok 2 2 Russia

Пример

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

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

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

city_name country_name
Moscow Russia
Vladivostok Russia

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

  • JOIN,
    которая объединяет таблицы по условию
  • LEFT JOIN,
    которая сохраняет все строки левой таблицы
  • RIGHT JOIN,
    которая сохраняет все строки правой таблицы