INNER JOIN возвращает только строки, совпадающие в обеих таблицах. LEFT JOIN возвращает все строки из левой таблицы плюс совпадения из правой (NULL, если их нет). FULL OUTER JOIN возвращает все строки из обеих таблиц, заполняя NULL в зависимости от того, какая сторона не имеет совпадений.
Пример
-- INNERSELECT u.name, o.id, o.amount
FROM users u
JOIN orders o ON o.user_id = u.id;
-- LEFTSELECT u.name, o.id
FROM users u
LEFTJOIN orders o ON o.user_id = u.id;
-- FULL OUTER (Postgres)SELECT*FROM a FULLOUTERJOIN b ON a.id = b.a_id;
-- Anti-joinSELECT u.*FROM users u
LEFTJOIN orders o ON o.user_id = u.id
WHERE o.id ISNULL;
Итог
INNER JOIN возвращает только строки, совпадающие в обеих таблицах.
В чем разница между INNER JOIN, LEFT JOIN и FULL OUTER JOIN? · Sobeso