Добавить в корзинуПозвонить
Найти в Дзене
DataEngineering c нуля

Основы по джойнам в SQL

Джойны (JOIN) — это то, как в SQL соединяют данные из двух и более таблиц. Если вы работаете с базами данных, вы будете использовать их постоянно. В этой статье разберём: Никакой лишней теории — только то, что реально понадобится в первых задачах. Разберем каждый из них поподробнее INNER JOIN возвращает только те строки, где есть совпадение в обеих таблицах. Если запись из левой таблицы не нашла пару в правой — она не попадёт в результат. Рассмотрим простой пример:
Даны такие таблицы: Результом выполнения INNER JOIN будет следующая таблица:
Синтаксис: select * from table_a join table_b on table_a.id = table_b.id LEFT JOIN возвращает все строки из левой таблицы, даже если в правой таблице нет совпадения. Если пары нет — поля из правой таблицы будут заполнены NULL. Рассмотрим простой пример:
Даны такие таблицы: Результатом будет такая таблица: Синтаксис: select * from table_a left join table_b on table_a.id = table_b.id RIGHT JOIN работает аналогично, только данные присоединяются к
Оглавление

Джойны (JOIN) — это то, как в SQL соединяют данные из двух и более таблиц. Если вы работаете с базами данных, вы будете использовать их постоянно.

В этой статье разберём:

  • что такое INNER, LEFT, RIGHT и FULL JOIN;
  • чем они отличаются;
  • на какие простые грабли наступают новички.

Никакой лишней теории — только то, что реально понадобится в первых задачах.

Основные типы объединений JOIN

  1. INNER JOIN
  2. LEFT&RIGHT JOIN
  3. FULL JOIN
  4. CROSS JOIN
  5. SELF JOIN

Разберем каждый из них поподробнее

1. INNER JOIN

INNER JOIN возвращает только те строки, где есть совпадение в обеих таблицах. Если запись из левой таблицы не нашла пару в правой — она не попадёт в результат.

Рассмотрим простой пример:
Даны такие таблицы:

-2

Результом выполнения INNER JOIN будет следующая таблица:

-3

Синтаксис:

select * from table_a join table_b on table_a.id = table_b.id

2. LEFT JOIN

LEFT JOIN возвращает все строки из левой таблицы, даже если в правой таблице нет совпадения. Если пары нет — поля из правой таблицы будут заполнены NULL.

-4

Рассмотрим простой пример:
Даны такие таблицы:

-5

Результатом будет такая таблица:

-6

Синтаксис:

select * from table_a left join table_b on table_a.id = table_b.id

RIGHT JOIN работает аналогично, только данные присоединяются к правой таблице.

3. FULL JOIN

FULL JOIN (или FULL OUTER JOIN) возвращает все строки из обеих таблиц. Если совпадения нет с одной из сторон — недостающие поля заполняются NULL.

-7

Рассмотрим тот же пример, результатом будет следующая таблица:

-8

Синтаксис:

select * from table_a full join table_b on table_a.id = table_b.id

4. CROSS JOIN

CROSS JOIN (декартово произведение) соединяет каждую строку из левой таблицы с каждой строкой из правой таблицы. Никакого условия ON здесь не нужно — его просто нет.

Рассмотрим пример:

-9

мы получали все возможные комбинации значений из первой и второй таблицы

Синтаксис:

select * from table_a cross join table_b

5. SELF JOIN

SELF JOIN — это не отдельный тип соединения, а приём, когда таблица соединяется сама с собой. Используется тот же INNER JOIN или LEFT JOIN, но таблица в FROM и в JOIN — одна и та же.

Рассмотрим пример:
SELECT

e.name AS сотрудник,

m.name AS руководитель

FROM employees e

LEFT JOIN employees m ON e.manager_id = m.id;

В результате мы получим таблицу сотрудников с их руководителями. Если руководителя нет, получим NULL

-10

Заключение

Мы разобрали основные типы джойнов в SQL: INNER, LEFT, FULL, CROSS и приём SELF JOIN. Теперь вы знаете, чем они отличаются и какой результат возвращает каждый из них.

Также для инженера данных важны физические типы джойнов. Их мы рассмотрим в следующих статьях.

Материалы были частично взяты с курса karpov.courses: https://lab.karpov.courses/learning/152/