Semi-join — это операция в реляционных базах данных, которая возвращает строки из первой таблицы, для которых существуют соответствующие строки во второй таблице, но при этом не возвращает данные из второй таблицы. Проще говоря, semi-join проверяет наличие соответствий, но не объединяет данные.
Что такое semi-join и anti-join? Зачем нужны и где применять?
Semi-join — это операция в реляционных базах данных, которая возвращает строки из первой таблицы, для которых существуют соответствующие строки во второй таблице, но при этом не возвращает данные из второй таблицы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Semi-join — это операция в реляционных базах данных, которая возвращает строки из первой таблицы, для которых существуют соответствующие строки во второй таблице, но при этом не возвращает данные из второй таблицы. Проще говоря, semi-join проверяет наличие соответствий, но не объединяет данные.
Anti-join — противоположность semi-join, возвращает строки из первой таблицы, для которых нет соответствующих строк во второй таблице.
Зачем нужны?
- Semi-join полезен, когда нужно проверить существование связанных записей без необходимости подтягивать данные из второй таблицы, что экономит ресурсы.
- Anti-join используется для поиска записей, не имеющих связей, например, чтобы найти «осиротевшие» записи или исключить связанные данные.
Где применять?
- В аналитике для фильтрации данных по наличию или отсутствию связей.
- При оптимизации запросов, чтобы уменьшить объем передаваемых данных.
Пример на SQL:
-- Semi-join: выбрать клиентов, у которых есть заказы
SELECT DISTINCT c.*
FROM customers c
WHERE EXISTS (
SELECT 1 FROM orders o WHERE o.customer_id = c.id
);
-- Anti-join: выбрать клиентов без заказов
SELECT c.*
FROM customers c
WHERE NOT EXISTS (
SELECT 1 FROM orders o WHERE o.customer_id = c.id
);