EXISTS
Проверяет, возвращает ли подзапрос хотя бы одну строку — не важно сколько, важен сам факт.
SELECT ... WHERE EXISTS (SELECT 1 FROM ... WHERE ...);Объяснение
Пример
-- Пользователи, сделавшие хотя бы один заказ
SELECT * FROM users u
WHERE EXISTS (
SELECT 1 FROM orders o WHERE o.user_id = u.id
);Связанные термины
Анекдоты по теме
— Что такое lateral join? — Это когда правая часть JOIN может ссылаться на строки из левой. — Зачем? — Классика: для каждого пользователя — его последние 3 заказа. SELECT u.*, o.* FROM users u, LATERAL (SELECT * FROM orders WHERE user_id = u.id ORDER BY date DESC LIMIT 3) o;
Разработчик: — У меня запрос на 8 таблиц через JOIN, подзапросы, оконные функции внутри WHERE и GROUP BY на хэш с миллиардом строк. Он идёт 3 дня. Как оптимизировать? DBA: — TRUNCATE TABLE карьера_разработчика. И иди в менеджеры.
— Что такое bulk_create в Django? — Создаёт много объектов одним запросом. User.objects.bulk_create([User(name=n) for n in names]) — Вместо loop с .create()? — Да. 1000 объектов: loop = 1000 INSERT, bulk_create = 1 INSERT с 1000 строками. — Насколько быстрее? — В 10–50 раз.