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

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

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

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

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

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

Виды JOIN в SQL

В моей практике я активно работаю с различными видами JOIN при написании тестов, особенно при проверке корректности работы с данными из множества таблиц. Знание типов JOIN критично для QA, так как это позволяет правильно валидировать результаты запросов и понимать, почему данные отображаются определённым образом.

INNER JOIN

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

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

Если пользователь не имеет заказов, он не будет показан в результатах. Это особенно важно при тестировании, когда нужно убедиться, что отображаются только связанные данные.

LEFT JOIN (LEFT OUTER JOIN)

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

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

Все пользователи будут в результате, даже если у них нет заказов (order_id будет NULL). Это полезно при проверке функции отображения списка пользователей со статистикой их активности.

RIGHT JOIN (RIGHT OUTER JOIN)

RIGHT JOIN — противоположность LEFT JOIN. Возвращает все строки из правой таблицы и совпадающие из левой.

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

Все заказы будут в результатах, даже если данных пользователя нет (что может указывать на ошибку в базе данных — на что стоит обратить внимание при тестировании).

FULL OUTER JOIN (FULL JOIN)

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

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

Это даёт полную картину: видны пользователи без заказов И заказы без пользователей. При тестировании помогает выявить несогласованности в данных.

CROSS JOIN

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

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

Если в таблице пользователей 100 строк, а в таблице товаров 50, результат будет 5000 строк. Используется редко, но важно знать при работе с комбинаторными данными.

SELF JOIN

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

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

Это показывает каждого сотрудника и его менеджера. При тестировании организационных структур это незаменимо.

Практическое применение в QA

При тестировании приложения важно:

  • Проверять, что используется правильный тип JOIN для каждого запроса
  • Валидировать корректное отображение NULL значений при LEFT/RIGHT JOIN
  • Убеждаться, что фильтры работают правильно при наличии соединений
  • Тестировать производительность сложных JOIN запросов с большими таблицами
  • Проверять, что логика приложения соответствует семантике используемых JOIN

Это базовое, но критически важное знание для любого QA, работающего с БД.