Сталкивался ли с Semi JOIN в PostgreSQL
Python
Junior
Без компании
Сталкивался ли с Semi JOIN в PostgreSQL
Ответы
Semi JOIN в PostgreSQL — это не отдельный синтаксический оператор, а концепция, когда JOIN используется для фильтрации строк без дублирования. Он возвращает строки из первой таблицы, где есть совпадения во второй, но без объединения строк второй таблицы.
**Пример с EXISTS (классический Semi JOIN):**
```
SELECT *
FROM users u
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.user_id = u.id
);
```
**Эквивалент с IN:**
```
SELECT *
FROM users
WHERE id IN (SELECT user_id FROM orders);
```
**Ключевые особенности:**
- Не дублирует строкй при совпадениях (в отличие от обычного JOIN)
- Оптимизатор часто преобразует IN/EXISTS в одинаковый план выполнения
- EXISTS обычно эффективнее при большом подзапросе, IN — при малом списке значений