Назад к вопросам
Junior
67
questionbank

Как работает SQL JOIN?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

Существуют различные типы JOIN:

  • INNER JOIN: Возвращает строки, где есть соответствие в обеих таблицах.
  • LEFT JOIN (или LEFT OUTER JOIN): Возвращает все строки из левой таблицы и совпадающие строки из правой таблицы. Если совпадений нет, справа будут NULL.
  • RIGHT JOIN (или RIGHT OUTER JOIN): Возвращает все строки из правой таблицы и совпадающие строки из левой таблицы. Если совпадений нет, слева будут NULL.
  • FULL JOIN (или FULL OUTER JOIN): Возвращает все строки, когда есть совпадение в одной из таблиц. Если совпадений нет, будут NULL с отсутствующей стороны.
  • CROSS JOIN: Возвращает декартово произведение строк из обеих таблиц.

Синтаксис обычно выглядит так:

SELECT column_list
FROM table1
JOIN_TYPE table2
ON table1.matching_column = table2.matching_column;

Пример INNER JOIN:

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

В этом примере выбираются имена клиентов и их номера заказов, где CustomerID совпадает в обеих таблицах.

Пример LEFT JOIN:

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

Здесь выбираются все клиенты (из левой таблицы) и их заказы. Если у клиента нет заказов, OrderID будет NULL.

Пример RIGHT JOIN:

SELECT Orders.OrderID, Employees.EmployeeName
FROM Orders
RIGHT JOIN Employees ON Orders.EmployeeID = Employees.EmployeeID;

Выбираются все заказы (из правой таблицы) и сотрудники, которые их обрабатывали. Если сотрудник не обрабатывал никакие заказы, OrderID будет NULL.

Пример FULL JOIN:

SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

Выбираются все клиенты и все заказы. Если у клиента нет заказов или заказ не связан с клиентом, соответствующая сторона будет содержать NULL.

Пример CROSS JOIN:

SELECT Customers.CustomerName, Products.ProductName
FROM Customers
CROSS JOIN Products;

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

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