SQL JOIN: типы и примеры

Рассказали о команде JOIN в SQL, разобрали типы команды и рассмотрели её использование на практических примерах.

25К открытий52К показов

SQL Join — это операция, которая используется для объединения строк из нескольких таблиц. Она позволяет объединить данные для выполнения сложных запросов.

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

Рассмотрим подробнее типы команды Join в SQL.

  1. Inner Join
  2. Self Join
  3. Cross Join
  4. Outer Join: LEFT, RIGHT и FULL

Inner Join в SQL

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

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

Пример использования INNER JOIN:

			SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id;
		

В этом примере мы объединяем таблицы “employees” и “departments” на основе идентификатора отдела (department_id). Результат этого запроса вернет только те строки, где значение department_id присутствует и в таблице employees, и в таблице departments.

Self Join в SQL

SELF JOIN — это операция объединения таблицы с самой собой. Это означает, что при SELF JOIN таблица используется дважды в одном запросе. Чтобы не путаться, каждое вхождение таблицы в команде использует псевдоним.

Онлайн-курс «JAVA-разработчик» от EdMe.pro
  • постоянный доступ
  • бесплатно
  • онлайн
tproger.ru

SELF JOIN используется в случаях, когда нужно проанализировать зависимости внутри одной таблицы. Самый частый пример использования SELF JOIN — обработка деревьев или графов, которые хранятся в одной таблице.

Пример использования SELF JOIN:

			SELECT e1.EmployeeID, e1.FirstName, e1.LastName, e2.SupervisorID
FROM Employee e1
JOIN Employee e2 ON e1.SupervisorID = e2.EmployeeID;
		

В этом примере мы используем SELF JOIN для таблицы “Employee”, чтобы получить информацию о сотрудниках и их непосредственных руководителях. Объединение выполняется на основе поля SupervisorID, которое указывает на руководителя текущего сотрудника.

Cross Join в SQL

SQL CROSS JOIN позволяет получить декартово произведение нескольких таблиц. В результате создается набор, включающий все возможные комбинации строк в таблицах.

Декартово произведение в данном случае — это результат соединения строки из первой таблицы с каждой строкой из второй таблицы.

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

Пример использования CROSS JOIN:

			SELECT *
FROM sales_organization
CROSS JOIN sales_channel;
		

Предположим, что у нас есть две таблицы: “sales_organization” и “sales_channel”, и мы хотим сформировать набор результатов, включающий все возможные комбинации организаций и каналов продаж.

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

Outer Join в SQL

SQL OUTER JOIN — это тип соединения, включающий все строки из одной таблицы и только совпадающие строки из другой таблицы.

В SQL OUTER JOINS существует три типа.

LEFT OUTER JOIN

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

Онлайн-курс «Python-разработчик» от Яндекс Практикума
  • постоянный доступ
  • бесплатно
  • онлайн
tproger.ru

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

Предположим, у нас есть две таблицы: “orders” и “customers”. Нам нужно получить все заказы и их соответствующих клиентов, даже если у заказа нет клиента. Мы можем использовать LEFT OUTER JOIN для этого:

			SELECT orders.order_id, orders.order_date, customers.customer_name
FROM orders
LEFT OUTER JOIN customers ON orders.customer_id = customers.customer_id;
		

Этот запрос вернет все заказы из таблицы “orders” вместе со списком клиентов из таблицы “customers”. Если у заказа нет соответствующего клиента, столбец “customer_name” будет содержать значение NULL.

RIGHT OUTER JOIN

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

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

Предположим, у нас есть две таблицы: “orders” и “customers”. Нам нужно получить всех клиентов и их соответствующие заказы, даже если у клиента нет заказов. Мы можем использовать RIGHT OUTER JOIN для этого:

			SELECT customers.customer_id, customers.customer_name, orders.order_date
FROM customers
RIGHT OUTER JOIN orders ON customers.customer_id = orders.customer_id;
		

Этот запрос вернет всех клиентов из таблицы “customers” вместе со списком заказов из таблицы “orders”. Если у клиента нет соответствующих заказов, столбец “order_date” будет содержать значение NULL.

FULL OUTER JOIN

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

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

Предположим, у нас есть две таблицы: “employees” и “departments”. Нам нужно получить всех сотрудников и их соответствующие отделы, включая сотрудников, у которых не указан отдел, и отделы, у которых нет сотрудников. Мы можем использовать FULL OUTER JOIN для этого:

			SELECT employees.employee_id, employees.employee_name, departments.department_name
FROM employees
FULL OUTER JOIN departments ON employees.department_id = departments.department_id;
		

Этот запрос вернет всех сотрудников из таблицы “employees” вместе со списком отделов из таблицы “departments”. Если у сотрудника не указан отдел или у отдела нет сотрудников, соответствующие столбцы будут содержать значение NULL.

Заключение

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

Читайте и о других основных командах SQL.

Следите за новыми постами
Следите за новыми постами по любимым темам
25К открытий52К показов