Руководство по SQL. INNER JOIN.

INNER JOIN является наиболее часто встречающимся и наиболее важным видом слияния данных.

Данный вид слияния создаёт новую таблицу, которая комбинирует значения колонок двух таблиц на основе предиката слияния. Запрос сравнивает каждую запись первой таблицы с каждой записью второй таблицы для того, чтобы найти все пары записей, которые соответствуют предикату. Когда предикат верен, значения колонок каждой совпадающей пары комбинируются в результирующую запись.

Данный запрос имеет следующий вид:


SELECT таблица1.колонка1, таблица2.колонка2...
FROM таблица1
INNER JOIN таблицы2
ON таблицы1.общее_поле = таблица2.общее_поле;

Пример:

Предположим, что у нас есть две таблицы:
developers:


+----+-------------------+------------+------------+--------+
| ID | NAME              | SPECIALTY  | EXPERIENCE | SALARY |
+----+-------------------+------------+------------+--------+
|  1 | Eugene Suleimanov | Java       |          2 |   2500 |
|  2 | Peter Romanenko   | Java       |          3 |   3500 |
|  3 | Andrei Komarov    | JavaScript |          3 |   2500 |
|  4 | Konstantin Geiko  | C#         |          2 |   2000 |
|  5 | Asya Suleimanova  | UI/UX      |          2 |   1800 |
|  6 | Kolya Nikolaev    | Javascript |          5 |   3400 |
|  7 | Ivan Ivanov       | C#         |          1 |    900 |
|  8 | Ludmila Geiko     | UI/UX      |          2 |   1800 |
+----+-------------------+------------+------------+--------+

tasks:


+---------+-------------+------------------+------------+--------------+
| TASK_ID | TASK_NAME   | DESCRIPTION      | DEADLINE   | DEVELOPER_ID |
+---------+-------------+------------------+------------+--------------+
|       1 | Bug#123     | Fix company list | 2016-06-03 |            1 |
|       2 | Bug#321     | Fix registration | 2016-06-06 |            2 |
|       3 | Feature#777 | Latest actions   | 2016-06-25 |            3 |
+---------+-------------+------------------+------------+--------------+

Попробуем выполнить следующий запрос:


mysql> SELECT ID, NAME, TASK_NAME, DEADLINE 
FROM developers 
INNER JOIN tasks 
ON developers.ID = tasks.DEVELOPER_ID;

В результате мы получим следующую таблицу:


+----+-------------------+-------------+------------+
| ID | NAME              | TASK_NAME   | DEADLINE   |
+----+-------------------+-------------+------------+
|  1 | Eugene Suleimanov | Bug#123     | 2016-06-03 |
|  2 | Peter Romanenko   | Bug#321     | 2016-06-06 |
|  3 | Andrei Komarov    | Feature#777 | 2016-06-25 |
+----+-------------------+-------------+------------+

Как видите, мы получили всех разработчиков, у которых есть задачи в таблице tasks.

На этом мы заканчиваем изучение INNER JOIN.