Join в SQL: inner, left, right и full join.

Механизм джойнов это мощный инструмент реляционных баз данных. Для соединения двух таблиц в одну и результирующих данных в одну,  это максимально часто используется в SQL. И для нас доступны различные виды join.

Виды join:

  • INNER JOIN
  • LEFT JOIN
  • RIGHT JOIN
  • FULL JOIN
  • CROSS JOIN

Inner Join

Соединяются две таблицы, и результатом будет их внутреннее пересечение по какому-либо критерию. Результатом будут записи, которые соответствуют обеим таблицам, присутствуют в обеих таблицах.

То есть INNER JOIN возвращает только те строки, которые имеют соответствующие значения в обеих таблицах.

Ключевое слово INNER JOIN выбирает все строки из обеих таблиц до тех пор, пока существует соответствие между столбцами.

SELECT CategoryName, ProductName 
FROM Categories INNER JOIN Products 
ON Categories.CategoryID = Products.CategoryID;

Может использоваться не только равенство НО любой оператор реляционного сравнения: «=», «<«, «>,» «<=», «>=» или «<>».

 

Left Join

Ключевое слово LEFT JOIN возвращает все записи из левой таблицы, даже если в правой таблице (Orders) нет совпадений.

Если соотношений в правой таблице более чем одно — для каждой будет возвращена строка. 

Если нет совпадения в правой таблице, возвращаются NULL значения для столбцов правой таблицы.

SELECT ProductName, CategoryName
FROM Products LEFT JOIN Categories
ON Products.CategoryID = Categories.CategoryID;

 SQL запрос выше вернет результирующую таблицу где будут все продукты, и категории для них (если продукт еще не привязан к какой-либо категории, то CategoryName будет NULL.

 Right Join

Right Join аналогичен Left Join и всегда может быть заменен на Left Join, путем перестановки следования таблиц в инструкции FROM .

Ключевое слово RIGHT JOIN возвращает все записи из правой таблицы, даже если в левой таблице нет совпадений.

Full Join

FULL JOIN возвращает все строки из обеих таблиц, заполняя NULL значения для отсутствующих соответствий.

Запрос возвращает все строки из обеих таблиц, включая те, которые не имеют соответствующих записей в другой таблице.

SELECT column1, column2, ...
FROM table1
FULL JOIN table2
ON table1.column = table2.column;

Cross Join.

CROSS JOIN (или кросс-объединение) — это операция объединения двух или более таблиц, которая возвращает декартово произведение этих таблиц.

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

 

Это означает, что если у нас есть две таблицы с n и m строками соответственно, то результат будет содержать n*m строк.

 

SELECT *
FROM Cities, ShopTypes;

SQL выше создаст все возможные комбинации городов и типов точек (условно ПВЗ, оффлайн точка и тд), может использоваться например для создания фильтров в E-commerce проектах или генерации страниц под НЧ запросы на сайтах агрегаторах. 

Также например, в случае, когда вам нужно вывести все возможные размеры и цвета товара.

Резюмируем:

  • INNER JOIN возвращает только совпадающие записи
  • LEFT JOIN и RIGHT JOIN возвращают все строки из одной таблицы и соответствующие из другой
  • FULL JOIN объединяет результаты LEFT и RIGHT OUTER JOIN
  • Использование JOIN позволяет эффективно объединять данные из нескольких таблиц
  • CROSS JOIN вернет все возможные пересечения (комбинации) строк между таблицами.

При работе с JOIN важно правильно выбирать тип соединения в зависимости от требуемого результата и структуры данных.

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

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