Если постоянно путаетесь в
JOIN, сохраните эту схему — на ней собраны самые популярные варианты объединения таблиц.LEFT JOIN: Возвращает все строки из левой таблицы (T1) и совпадающие строки из правой (T2). Если совпадений нет — значения из T2 будут
NULL.SELECT *
FROM T1
LEFT JOIN T2
ON T1.NAME = T2.NAME;
INNER JOIN: Возвращает только совпадающие записи, присутствующие в обеих таблицах.
SELECT *
FROM T1
INNER JOIN T2
ON T1.NAME = T2.NAME;
RIGHT JOIN: Возвращает все строки из правой таблицы (T2) и совпадающие строки из левой (T1). Если совпадений нет — значения из T1 будут
NULL.SELECT *
FROM T1
RIGHT JOIN T2
ON T1.NAME = T2.NAME;
LEFT JOIN (EXCLUDE T2): Возвращает записи, которые есть только в левой таблице.
SELECT *
FROM T1
LEFT JOIN T2
ON T1.NAME = T2.NAME
WHERE T2.ID IS NULL;
UNION ALL (EXCLUDE INNER): Возвращает записи, которые присутствуют только в одной из таблиц, исключая пересечение.
SELECT *
FROM T1
LEFT JOIN T2
ON T1.NAME = T2.NAME
WHERE T2.ID IS NULL
UNION ALL
SELECT *
FROM T1
RIGHT JOIN T2
ON T1.NAME = T2.NAME
WHERE T1.ID IS NULL;
RIGHT JOIN (EXCLUDE T1): Возвращает записи, которые есть только в правой таблице.
SELECT *
FROM T1
RIGHT JOIN T2
ON T1.NAME = T2.NAME
WHERE T1.ID IS NULL;
FULL OUTER JOIN: Возвращает все записи из обеих таблиц: совпадающие и несовпадающие.
SELECT *
FROM T1
FULL OUTER JOIN T2
ON T1.NAME = T2.NAME;
UNION ALL: Альтернатива
FULL OUTER JOIN для СУБД, где он не поддерживается (например, MySQL).SELECT *
FROM T1
LEFT JOIN T2
ON T1.NAME = T2.NAME
UNION ALL
SELECT *
FROM T1
RIGHT JOIN T2
ON T1.NAME = T2.NAME
WHERE T1.ID IS NULL;
👉 @SQLPortal
