RIGHT JOIN
Возвращает все строки из правой таблицы. Для строк без пары в левой — NULL.
SELECT ... FROM t1 RIGHT JOIN t2 ON t1.id = t2.t1_id;
Объяснение
Пример
-- Эквивалентные запросы SELECT * FROM orders o RIGHT JOIN users u ON u.id = o.user_id; -- То же самое: SELECT * FROM users u LEFT JOIN orders o ON o.user_id = u.id;
Связанные термины
Анекдоты по теме
— Зачем нужен ANTI JOIN? — Найти строки из левой таблицы, которых НЕТ в правой. — Пример? — Пользователи без заказов: SELECT u.* FROM users u WHERE NOT EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id); — Или через LEFT JOIN WHERE o.id IS NULL.
— Что такое 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;
Рекурсивный CTE для иерархии: WITH RECURSIVE tree AS ( SELECT id, name, parent_id, 0 AS depth FROM categories WHERE parent_id IS NULL UNION ALL SELECT c.id, c.name, c.parent_id, t.depth + 1 FROM categories c JOIN tree t ON c.parent_id = t.id ) SELECT * FROM tree ORDER BY depth, name; Программист: это чище чем 10 JOIN!