Объединение таблиц в SQL
В этом уроке вы узнаете, как объединить две таблицы.
Все запросы, которые вы видели до сих пор, были связаны с одной таблицей. В реальной жизни часто нужно запросить две или более таблиц одновременно и получить объединенный набор результатов. Технически это называется объединением (join), поскольку оно подразумевает объединение различных таблиц на основе общего поля между ними (внешнего ключа) для создания новых представлений данных.
Давайте рассмотрим таблицы сотрудников employees
и отделов departments
. Столбец dept_id
таблицы employees
является внешним ключом для таблицы departments
. Поэтому эти две таблицы можно объединить, чтобы получить «комбинированные» данные.
Таблица employees | Таблица departments |
+--------+--------------+------------+---------+ | emp_id | emp_name | hire_date | dept_id | +--------+--------------+------------+---------+ | 1 | Ethan Hunt | 2001-05-01 | 4 | | 2 | Tony Montana | 2002-07-15 | 1 | | 3 | Sarah Connor | 2005-10-18 | 5 | | 4 | Rick Deckard | 2007-01-03 | 3 | | 5 | Martin Blank | 2008-06-24 | NULL | +--------+--------------+------------+---------+ |
+---------+------------------+ | dept_id | dept_name | +---------+------------------+ | 1 | Administration | | 2 | Customer Service | | 3 | Finance | | 4 | Human Resources | | 5 | Sales | +---------+------------------+ |
Примечание. Чтобы объединить таблицы, должны совпадать данные столбцов, которые используются для объединения. Имена столбцов не обязаны совпадать.
Виды объединений таблиц
При объединении таблиц в запросе указывается тип объединения, который влияет на строки, которые появятся в результатов. В SQL доступны следующие виды объединений:
Inner Join
Объединение, которое возвращает только те строки, которые имеют совпадения в обеих объединенных таблицах.
Например, вы можете объединить таблицы сотрудников employees
и отделов departments
, чтобы создать набор результатов, показывающий название отдела для каждого сотрудника. При inner join
сотрудники, для которых нет информации об отделе, не включаются в набор результатов, как и отделы, в которых нет сотрудников.
Подробнее об inner join
мы поговорим в следующей статье.
Outer Join
Outer join
— это расширение inner join
. Outer join
возвращает строки, даже если они не имеют связанных строк в объединенной таблице. Существует три типа outer join
: left outer join
, right outer join
и full outer join
.
Подробнее об этих разновидностях outer join
мы поговорим в следующих статьях.
Cross Join
Cross join
— это соединения без условия соединения. Каждая строка одной таблицы объединяется с каждой строкой другой таблицы. Такой тип набора результатов называется декартовым или перекрестным произведением.
Например, cross join
между таблицами сотрудников employees
и отделов departments
вернет набор результатов с одной строкой для каждой возможной комбинации «сотрудники/отделы».
Более подробно о cross join мы поговорим в следующих статьях.