Команда INNER JOIN
Команда INNER JOIN используется для объединения строк
из двух таблиц на основе условия связи между столбцами.
Связь обычно выполняется между
PRIMARY KEY одной таблицы
и соответствующим FOREIGN KEY другой таблицы.
При выполнении INNER JOIN база данных сравнивает значения
указанных столбцов в обеих таблицах.
В результат попадают только те строки,
для которых найдено совпадение в обеих таблицах.
Если строка существует только в одной таблице,
но не имеет соответствия в другой —
она не будет включена в результат.
Таким образом, INNER JOIN
возвращает только пересечение данных.
Синтаксис
SELECT table1.column_list, table2.column_list
FROM table1
INNER 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 |
Пример
Давайте свяжем таблицы cities и countries по полям country_id и id, чтобы получить только те города, для которых существует связанная страна:
SELECT
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 |
Пример
Давайте выберем все поля обеих таблиц, чтобы увидеть, как объединяются строки по совпадающим значениям ключей:
SELECT
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, используя условие после соединения таблиц:
SELECT
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,
которая сохраняет все строки правой таблицы