Объединение трех таблиц в SQL

Ob Edinenie Treh Tablic V Sql



В реляционных базах данных чрезвычайно распространена задача получения данных из нескольких таблиц. В зависимости от целевого результата это включает в себя объединение нескольких таблиц в единое целое и получение полученных данных.

Когда дело доходит до соединений, большинство из нас в основном работают с ограничением в две таблицы и тому подобное. Однако обычно требуется объединить три таблицы, чтобы получить более значимое расположение данных и понимание. Возьмем, к примеру, случай, когда вы хотите получить список фильмов, соответствующий им список проката и фактическую информацию о прокате. Каждая из этих единиц, например фильмы, инвентарь и сведения о прокате, находятся в отдельных таблицах.

В этом руководстве мы познакомим вас с различными соединениями и методами, которые можно использовать для объединения трех таблиц в 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, о том, как они работают и как их можно использовать для объединения трех таблиц.