Skip to content

З'єднання SQL пояснені

Порівняння типів JOIN у SQL: inner, outer, cross, self, lateral, natural — що повертає кожен тип і приклад в один рядок.

З'єднання об'єднують рядки двох таблиць за спільним ключем. Тип з'єднання визначає, які рядки лишаються, коли ключі збігаються, не збігаються або повторюються.

Довідкова таблиця · 8 записи
8 of 8 rows
Внутрішні та зовнішні
Лише рядки, для яких умова ON збігається в обох таблицях. Рядки без збігу з будь-якого боку відкидаються.SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id;
Усі рядки лівої таблиці. Стовпці правого боку мають NULL там, де немає збігу.SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id;
Усі рядки правої таблиці. Стовпці лівого боку мають NULL там, де немає збігу.SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id;
Усі рядки обох таблиць. Сторони без збігу заповнюються NULL.SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
Перехресні та самоз'єднання
Декартовий добуток. Кожен рядок лівого боку поєднується з кожним рядком правого. Без умови ON.SELECT u.name, o.total FROM users u CROSS JOIN orders o;
Таблиця, з'єднана сама з собою через псевдоніми. Порівнює рядки в межах однієї таблиці.SELECT a.id AS o1, b.id AS o2 FROM orders a JOIN orders b ON a.user_id = b.user_id WHERE a.id < b.id;
Додаткові
Підзапит у FROM, що обчислюється для кожного зовнішнього рядка. Підзапит може посилатися на стовпці зовнішньої таблиці.SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o;
З'єднання за стовпцями зі спільною назвою. Без умови ON. Остерігайтеся ненавмисних збігів ключів.SELECT u.name, o.total FROM users u NATURAL JOIN orders o;