Когда дело доходит до соединений, большинство из нас в основном работают с ограничением в две таблицы и тому подобное. Однако обычно требуется объединить три таблицы, чтобы получить более значимое расположение данных и понимание. Возьмем, к примеру, случай, когда вы хотите получить список фильмов, соответствующий им список проката и фактическую информацию о прокате. Каждая из этих единиц, например фильмы, инвентарь и сведения о прокате, находятся в отдельных таблицах.
В этом руководстве мы познакомим вас с различными соединениями и методами, которые можно использовать для объединения трех таблиц в SQL.
Требования:
В демонстрационных целях мы будем использовать MySQL версии 80 и образец базы данных Sakila. Чтобы продолжить, вы можете загрузить и настроить базу данных Sakila на своем сервере MySQL. Не стесняйтесь использовать любой другой набор данных, который вы считаете применимым.
Типы объединений в SQL
Прежде чем мы перейдем к применению соединений, давайте начнем с обсуждения различных типов соединений, доступных в базах данных SQL.
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
Первый тип соединения — это INNER JOIN. Этот тип соединения возвращает только те строки, которые содержат совпадающее значение в обеих таблицах. Это очень распространенный тип соединения и наиболее упрощенный при объединении двух таблиц.
Синтаксис следующий:
ВЫБРАТЬ столбцыИЗ таблицы1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ таблица2 НА таблица1.имя_столбца = таблица2.имя_столбца;
ЛЕВОЕ ПРИСОЕДИНЕНИЕ
В случае LEFT JOIN он возвращает все строки из левой таблицы и совпадающие строки из правой таблицы. Если в правой таблице нет совпадающих значений, соединение добавляет вместо них значения NULL.
Синтаксис следующий:
ВЫБРАТЬ столбцыИЗ таблицы1
ЛЕВОЕ СОЕДИНЕНИЕ таблицы 2 НА таблица1.имя_столбца = таблица2.имя_столбца;
ПРАВОЕ ПРИСОЕДИНЕНИЕ
Как вы можете догадаться, ПРАВОЕ СОЕДИНЕНИЕ является противоположностью ЛЕВОГО СОЕДИНЕНИЯ. Этот тип соединений возвращает все строки из правой таблицы и только соответствующие строки из левой таблицы. Если в левой таблице нет соответствующих строк, соединение добавляет к ней значения NULL.
Ниже приведен синтаксис ПРАВОГО СОЕДИНЕНИЯ:
ВЫБРАТЬ столбцыИЗ таблицы1
ПРАВОЕ СОЕДИНЕНИЕ таблицы 2 НА таблица1.имя_столбца = таблица2.имя_столбца;
ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ
Следующий тип соединения, с которым вы столкнетесь в базах данных SQL, — это ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ. Этот тип соединения возвращает все строки, если есть совпадения в правой или левой таблицах. Если ни в одном из двух значений нет соответствующего значения, он возвращает NULL для столбцов таблицы без совпадения.
Ниже демонстрируется синтаксис FULL OUTER JOIN:
ВЫБРАТЬ столбцыИЗ таблицы1
ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ, таблица 2 НА таблица1.имя_столбца = таблица2.имя_столбца;
Следует иметь в виду, что не все механизмы баз данных поддерживают ПОЛНЫЕ ВНЕШНИЕ СОЕДИНЕНИЯ. Для этого вам может потребоваться работать с другими типами JOINS или подзапросами.
Примеры:
Давайте рассмотрим несколько примеров того, как мы можем использовать эти типы соединений для объединения трех таблиц в SQL.
Пример 1. Использование INNER JOIN
Начнем с INNER JOIN. Предположим, мы хотим получить список фильмов, список проката и соответствующие сведения о прокате.
Мы можем использовать несколько INNER JOINS в связанных таблицах, как показано в следующем примере:
ВЫБИРАТЬфильм.название,
инвентарь.inventory_id,
rent.rental_date
ОТ
фильм
ВНУТРЕННЕЕ СОЕДИНЕНИЕ инвентаря НА
Film.film_id = Inventory.film_id
Аренда INNER JOIN НА
инвентарь.inventory_id = rent.inventory_id;
В данном примере запроса мы начинаем с объединения таблиц фильмов и инвентаря на основе столбца «film_id». Затем мы берем полученный набор и соединяем его с таблицей аренды на основе столбца «inventory_id».
Это гарантирует, что мы объединим три таблицы с помощью базового INNER JOIN. В результате набор выглядит следующим образом:
Пример 2. Использование INNER JOIN и LEFT JOIN
Допустим, теперь нам нужен список фильмов, список проката (если таковой имеется) и связанные с ним сведения о прокате.
Мы также хотим быть уверены, что даже если у фильма нет проката, мы все равно включим его в результат. Здесь в игру вступают INNER JOIN и LEFT JOIN.
Рассмотрим следующий пример:
ВЫБИРАТЬфильм.название,
инвентарь.inventory_id,
rent.rental_date
ОТ
фильм
ВНУТРЕННЕЕ СОЕДИНЕНИЕ инвентаря НА
Film.film_id = Inventory.film_id
LEFT ПРИСОЕДИНЯЙТЕСЬ к аренде НА
инвентарь.inventory_id = rent.inventory_id;
В этом примере мы используем INNER JOIN для объединения таблицы фильмов и инвентаря, чтобы гарантировать получение заголовков из доступного инвентаря. Затем мы используем LEFT JOIN, чтобы присоединиться к таблице проката, чтобы получить сведения об аренде, если они доступны, и NULL для любого названия, у которого нет истории проката.
В результате набор выглядит следующим образом:
Заключение
В этом уроке мы узнали о различных типах JOINS в SQL, о том, как они работают и как их можно использовать для объединения трех таблиц.