← Назад к вопросам

Какие знаешь виды join в SQL?

1.0 Junior🔥 161 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Виды JOIN в SQL

Основные типы

JOIN используется для объединения данных из нескольких таблиц по условию. Существует несколько основных типов:

1. INNER JOIN (внутреннее объединение)

SELECT users.name, orders.order_id
FROM users
INNER JOIN orders ON users.id = orders.user_id;

Результат: только совпадающие строки из обеих таблиц

2. LEFT JOIN (левое объединение)

SELECT users.name, orders.order_id
FROM users
LEFT JOIN orders ON users.id = orders.user_id;

Результат: все строки из левой таблицы (users) + совпадающие из правой (orders). Если совпадений нет, NULL для правой таблицы

3. RIGHT JOIN (правое объединение)

SELECT users.name, orders.order_id
FROM users
RIGHT JOIN orders ON users.id = orders.user_id;

Результат: все строки из правой таблицы (orders) + совпадающие из левой (users). NULL для несовпадающих левой таблицы

4. FULL OUTER JOIN (полное объединение)

SELECT users.name, orders.order_id
FROM users
FULL OUTER JOIN orders ON users.id = orders.user_id;

Результат: все строки из обеих таблиц, NULL где совпадений нет

5. CROSS JOIN (декартово произведение)

SELECT users.name, products.name
FROM users
CROSS JOIN products;

Результат: каждая строка левой таблицы объединяется с каждой строкой правой (без условия)

6. SELF JOIN (самообъединение)

SELECT e1.name AS employee, e2.name AS manager
FROM employees e1
INNER JOIN employees e2 ON e1.manager_id = e2.id;

Результат: таблица объединяется с собой для поиска связей (например, начальник-подчиненный)

Визуальная диаграмма

INNER JOIN     LEFT JOIN      RIGHT JOIN     FULL JOIN
   Таблица A      Таблица A      Таблица A      Таблица A
   ███████        ███████████    ███████        ██████████████
   ███████ B      ███████ B      ███████ B      ███████ B
   ███████        Результат:     Результат:     Результат:
   Результат:     A + совпадения B полное       A полное + B
   только пересечение

Практический пример

-- Найти всех пользователей и их заказы
SELECT 
  u.id,
  u.name,
  COUNT(o.id) as order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id, u.name;

Для QA-тестирования важно проверять правильность JOIN при проверке данных в базе и валидации связей между таблицами.