Для комбинирования данных из двух или более таблиц базы данных (далее – БД), в языке SQL используется механизм объединения (join). Он объединяет определённые поля в указанных таблицах БД и выводит необходимый нам результат.
Предположим, что у нас есть две таблицы:
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 |
+----+-------------------+------------+------------+--------+
projects
+---------+-------------+------------------+------------+--------------+
| 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 DESCRIPTION, DEADLINE
FROM developers, tasks
WHERE developers.ID = tasks.DEVELOPER_ID ;
В итоге мы увидим следующий результат:
+----+-------------------+-------------+------------+
| ID | NAME | DESCRIPTION | 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 |
+----+-------------------+-------------+------------+
Мы также можем усложнить запрос для того, чтобы получить все задания определённого разработчика:
mysql> SELECT ID, NAME, TASK_NAME DESCRIPTION, DEADLINE
FROM developers, tasks WHERE developers.ID = tasks.DEVELOPER_ID
AND developers.ID = 1;
Результатом данного запроса станет следующее:
+----+-------------------+-------------+------------+
| ID | NAME | DESCRIPTION | DEADLINE |
+----+-------------------+-------------+------------+
| 1 | Eugene Suleimanov | Bug#123 | 2016-06-03 |
+----+-------------------+-------------+------------+
Другими словами, мы можем использовать весь арсенал условных запросов при объединении таблиц.
Виды объединений (JOIN)
- INNER JOIN:
возвращает записи, когда имеются совпадения в обоих таблицах - LEFT JOIN:
возвращает записи из левой таблицы даже если нет совпадений в правой. - RIGHT JOIN:
возвращает все записи из правой таблицы, даже если нет совпадений в левой. - FULL JOIN:
возвращает записи, когда есть совпадение, хотя бы в одной из таблиц. - SELF JOIN:
используется для объединения таблицы с ней самой, таким образом, как будто первая таблица является и второй, временно переименовывая хотя бы одну из таблиц в SQL запросе.
На этом мы заканчиваем изучение способов объединения таблиц.
В следующей статье мы рассмотрим такую сущность, как объединения (UNIONS).