JOIN в SQL нужен, чтобы соединять данные из нескольких таблиц. Например, клиенты лежат в одной таблице, заказы — в другой, а в результате нужно увидеть имя клиента и сумму заказа рядом
Простой пример:
SELECT clients.name, orders.amount
FROM clients
JOIN orders ON orders.client_id = clients.id;
Запрос берет клиентов, находит их заказы по совпадению orders.client_id = clients.id и выводит общий результат
Зачем нужен JOIN
В нормальной базе данные не хранят все в одной огромной таблице. Клиенты, заказы, товары, платежи и категории обычно разделены. Это помогает не дублировать данные и поддерживать порядок в структуре
Но для отчета данные нужно собрать вместе. Вот здесь и нужен JOIN
clients.id → orders.client_id
Поле orders.client_id хранит ссылку на клиента. Условие ON объясняет базе, как связать строки
INNER JOIN
Обычный JOIN часто означает INNER JOIN. Он возвращает только строки, где связь нашлась в обеих таблицах
SELECT clients.name, orders.amount
FROM clients
INNER JOIN orders ON orders.client_id = clients.id;
Если у клиента нет заказов, он не попадет в результат. Это нормально, если вам нужен список только тех клиентов, у которых есть заказы
LEFT JOIN
LEFT JOIN возвращает все строки из левой таблицы и добавляет данные из правой, если связь найдена
SELECT clients.name, orders.amount
FROM clients
LEFT JOIN orders ON orders.client_id = clients.id;
Если у клиента нет заказа, клиент все равно будет в результате, а поля заказа будут NULL
Это удобно, когда нужно найти клиентов без заказов
SELECT clients.name
FROM clients
LEFT JOIN orders ON orders.client_id = clients.id
WHERE orders.id IS NULL;
Мини-практика
Создайте две таблицы и соедините их
CREATE TABLE clients (
id INTEGER,
name TEXT
);
CREATE TABLE orders (
id INTEGER,
client_id INTEGER,
amount INTEGER
);
INSERT INTO clients (id, name) VALUES
(1, 'Анна'),
(2, 'Илья'),
(3, 'Мария');
INSERT INTO orders (id, client_id, amount) VALUES
(1, 1, 1200),
(2, 1, 2400),
(3, 2, 900);
SELECT clients.name, orders.amount
FROM clients
JOIN orders ON orders.client_id = clients.id;
В результате Анна появится два раза, потому что у нее два заказа. Мария не появится, потому что у нее нет заказов. Затем замените JOIN на LEFT JOIN и сравните результат
Частые ошибки
Первая ошибка — забыть условие ON. Тогда база может получить декартово произведение: каждая строка одной таблицы соединится с каждой строкой другой
Вторая ошибка — соединять таблицы по похожим, но не связанным полям. Например, по имени клиента вместо идентификатора. Имена могут повторяться, а идентификаторы обычно уникальны
Третья ошибка — не понимать, почему строки дублируются. Если у одного клиента несколько заказов, клиент будет повторяться в результате. Это не ошибка JOIN, а отражение связи «один ко многим»
Что почитать дальше по SQL
Если нужен общий маршрут по теме, откройте рубрику SQL. Для соседних задач пригодятся эти разборы:
- DELETE SQL: как удалить строки из таблицы и не потерять лишние данные
- JOIN в SQL: INNER, LEFT и ошибки новичка
- SQL-запросы для начинающих: как устроены SELECT, WHERE, JOIN и GROUP BY
- Как проверить тип данных в SQL: столбцы, значения и системные таблицы



