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.