Карта / SQL / JOIN

JOIN

JOIN склеивает строки из двух таблиц по общему полю. Данные в базе обычно разложены по разным таблицам (пользователи отдельно, заказы отдельно) — JOIN собирает их вместе для одного запроса.

SELECT users.name, orders.total
FROM users
JOIN orders ON users.id = orders.user_id;

ON указывает, по какому полю связаны таблицы — обычно это внешний ключ (orders.user_id указывает на users.id).

Копнуть глубже

Виды JOIN — разница в том, что происходит, если совпадения нет:

-- INNER JOIN (или просто JOIN) — только строки, у которых есть пара в обеих таблицах
SELECT * FROM users JOIN orders ON users.id = orders.user_id;

-- LEFT JOIN — все строки из левой таблицы, даже без пары справа (там будет NULL)
SELECT * FROM users LEFT JOIN orders ON users.id = orders.user_id;
-- покажет ВСЕХ пользователей, даже тех, у кого ещё нет заказов
INNER JOIN LEFT JOIN
  • INNER JOIN — пересечение (только то, что есть в обеих таблицах);
  • LEFT JOIN — всё из левой + совпадения справа;
  • RIGHT JOIN — зеркально, всё из правой;
  • FULL OUTER JOIN — вообще всё из обеих, даже без совпадений (поддерживается не всеми СУБД).

Без JOIN пришлось бы делать два отдельных запроса и склеивать результаты в коде вручную — JOIN делает это на уровне базы, эффективнее.

🎤 Закрыл тему, если можешь объяснить:
• зачем нужен JOIN и что значит ON;
• разницу INNER JOIN и LEFT JOIN (если дошёл до 2-го слоя).