Шпаргалка по SQL JOINЕсли постоянно путаетесь в
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