Найти в Дзене

SQL: оператор JOIN. Основные типы объединения

JOIN — оператор языка SQL, предназначенный для выбора данных из двух таблиц и включения их в один результирующий набор. Если на примере: мы берем данные из двух таблиц, объединяем их по тем или иным правилам с помощью JOIN в единую таблицу, и выводим её. В зависимости от того, какие правила объединения применяются, выделяются несколько типов оператора JOIN. Наиболее популярные мы и рассмотрим.
Синтаксис простого запроса с JOIN выглядит так: SELECT fieldA, fieldB
FROM table1
JOIN table2
ON field1 = field2 Здесь мы объединяем две таблицы (table1 и table2) по одному ключевому полю. Если в обеих таблицах у этого поля одинаковые значения, то в результатах запроса данные этих таблиц будут выведены на одной строке. Проще всего рассмотреть это на примере. У нас есть две таблицы: Cats и Shops. В таблице Cats нас интересует имя кота и shop_id. В таблице Shops хранятся id магазина и его название. Допустим, мы хотим посмотреть, какие коты в каких магазинах живут. Для этого нам надо будет вывести

JOIN — оператор языка SQL, предназначенный для выбора данных из двух таблиц и включения их в один результирующий набор. Если на примере: мы берем данные из двух таблиц, объединяем их по тем или иным правилам с помощью JOIN в единую таблицу, и выводим её.

В зависимости от того, какие правила объединения применяются, выделяются несколько типов оператора JOIN. Наиболее популярные мы и рассмотрим.

Синтаксис простого запроса с JOIN выглядит так:

SELECT fieldA, fieldB
FROM table1
JOIN table2
ON field1 = field2

Здесь мы объединяем две таблицы (table1 и table2) по одному ключевому полю. Если в обеих таблицах у этого поля одинаковые значения, то в результатах запроса данные этих таблиц будут выведены на одной строке. Проще всего рассмотреть это на примере.

У нас есть две таблицы: Cats и Shops. В таблице Cats нас интересует имя кота и shop_id. В таблице Shops хранятся id магазина и его название.

-2
-3

Допустим, мы хотим посмотреть, какие коты в каких магазинах живут. Для этого нам надо будет вывести имя кота и название магазина. А чтобы объединить таблицы, потребуется общий элемент (ключ), одинаковый для обеих таблиц. В данном случае подойдет shop_id. Ведь значение shop_id в таблице Cats полностью соответствует значениям Id в таблице Shops

Тогда наше правило объединения будет выглядеть так. Мы хотим объединить таблицы Cats и Shops и вывести имя кота и название магазина с тем же id, который указан для этого кота в поле shop_id

Здесь мы видим, что кот Мурзик живет в магазине Catland, а кот Пушок в магазине Pets Point. Это и называется объединением таблиц Cats и Shops по условию shop_id = id. Для JOIN наличие условия объединения обязательно, иначе СУБД не будет знать как сопоставить значения. Код данного пример можно записать следующим образом: SELECT name, shopname FROM Cats JOIN Shops ON shop_id = id В идеальном мире для каждого shop_id найдется значение в поле id таблицы Shops

Но в реальности может случиться так, что какому-то коту присвоен shop_id, которого в таблице Shops нет. Или в shop_id и вовсе отсутствует значение, например если котик уже был продан. Или в таблице Shops будет магазин, которому нет соответствующих shop_id в таблице Cats

Как запрос поступит в таких случаях?

Для работы с подобными ситуациями в SQL существует несколько видов JOIN. Они объединяют данные по различным правилам, которые пригодятся в разных ситуациях.

INNER JOIN или просто JOIN (внутреннее соединение)

Покажет только те записи, для которых нашлись пары. Остальные он просто не выведет.

LEFT JOIN (левое соединение)

-9

Выведет все записи первой таблицы, а для ненайденных пар из второй проставит значение NULL

RIGHT JOIN (правое соединение)

-10

Поступит наоборот, и выведет все записи второй таблицы, а на место недостающей информации из первой таблицы подставит NULL

FULL JOIN  или OUTER JOIN (внешнее соединение)

Работает как одновременно левый (LEFT) и правый (RIGHT) JOIN, и выводит все записи из обеих таблиц.

Давайте посмотрим, как будут выглядеть разные виды JOIN

INNER JOIN выведет всего две строки. Все остальные, для которых значения в одной из таблиц отсутствуют, он не выводит.

LEFT JOIN добавит к ним еще 2 значения из поля name, а в поле shopname проставит значение NULL

RIGHT JOIN тоже добавит 2 значения, но уже в поле shopname и проставит NULL в поле name.

FULL JOIN выдаст все значения, и LEFT JOIN и RIGHT JOIN. Обратите внимание, что при использовании FULL JOIN, финальных полей даже больше, чем в каждой из таблиц по отдельности.

Узнать больше об инструментах анализа данных вы можете на нашем бесплатном вебинаре «Как стать аналитиком данных за 6 месяцев и начать зарабатывать от 50 000 до 200 000 рублей в месяц удаленно».

-16