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 магазина и его название.
         

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

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


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

Поступит наоборот, и выведет все записи второй таблицы, а на место нехватающей информации из первой таблицы подставит 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 рублей в месяц удаленно».

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.