0Pricing
SQL Academy · Урок

Механика INNER JOIN

Поймите INNER JOIN как отфильтрованное декартово произведение, научитесь задавать условия соединения и читать вывод EXPLAIN для соединений

«Механика INNER JOIN» — бесплатный урок SQL Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

Соединение INNER JOIN

INNER JOIN возвращает только строки, для которых существует соответствующая пара в BOTH таблицах, согласно условию ON.

Базовое соединение INNER JOIN

Получение каждого заказа вместе с его пользователем:

SELECT o.id, o.total, u.email
FROM orders o
INNER JOIN users u ON u.id = o.user_id;

-- INNER is the default — you can also write:
SELECT o.id, o.total, u.email
FROM orders o
JOIN users u ON u.id = o.user_id;

Несколько условий в ON

Условие ON — это обычное логическое выражение:

SELECT *
FROM events e
JOIN sessions s
  ON s.user_id = e.user_id
 AND e.created_at BETWEEN s.start_at AND s.end_at;

Псевдонимы

Псевдонимы сокращают запросы и устраняют неоднозначность ссылок на столбцы:

SELECT o.id, u.email
FROM orders AS o          -- AS is optional
JOIN users  AS u ON u.id = o.user_id;

Соединение трех и более таблиц

Объединяйте таблицы в цепочку, повторяя предложение JOIN:

SELECT o.id, u.email, p.name AS product
FROM orders   o
JOIN users    u ON u.id = o.user_id
JOIN products p ON p.id = o.product_id;

USING (столбец)

Если столбец для соединения имеет одинаковое имя в обеих таблицах, можно использовать USING — он устраняет дублирование этого столбца в результате:

SELECT o.id, total, email
FROM orders
JOIN users USING (user_id);   -- requires both tables to have user_id

NATURAL JOIN

Соединяет таблицы по каждому столбцу с одинаковым именем — будьте осторожны: такой запрос легко нарушить добавлением новых столбцов.

-- Avoid in production code:
SELECT * FROM orders NATURAL JOIN users;

Условия JOIN и WHERE

Для INNER JOIN условие в ON логически эквивалентно такому же условию в WHERE. Принято помещать в ON условия, определяющие связь JOIN, а в WHERE — фильтры строк.

SELECT * FROM orders o
JOIN users u ON u.id = o.user_id   -- join condition
WHERE u.country = 'US';            -- row filter

Размножение результатов

Если строка в A соответствует трем строкам в B, результат содержит три строки. Это нормально, но может удивить, если забыть об этом. Выполняете агрегацию? Осторожно используйте COUNT(*).

Предварительный обзор самосоединения

Таблицу можно соединить с самой собой, задав для каждого экземпляра отдельный псевдоним:

SELECT e.full_name AS employee, m.full_name AS manager
FROM employees e
JOIN employees m ON m.id = e.manager_id;

Производительность INNER JOIN

Внутренние соединения работают быстро, когда:

  • Столбец соединения проиндексирован, особенно на стороне FK
  • Одна таблица небольшая, что позволяет использовать соединение по хешу, или обе таблицы отсортированы, что позволяет использовать соединение слиянием
  • Фильтрация выполняется рано, чтобы уменьшить количество промежуточных строк

Итоги

INNER JOIN оставляет только соответствующие пары.

  • JOIN по умолчанию означает INNER JOIN
  • ON задает условие соединения
  • Псевдонимы делают запросы короче
  • Столбцы соединения должны быть проиндексированы

Быстрая проверка

Что вернет orders INNER JOIN users ON users.id = orders.user_id, если для заказа нет соответствующего пользователя, то есть заказ является осиротевшим?

Часто задаваемые вопросы

Урок «Механика INNER JOIN» бесплатный?

Да — полный текст урока «Механика INNER JOIN» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «Механика INNER JOIN»?

Поймите INNER JOIN как отфильтрованное декартово произведение, научитесь задавать условия соединения и читать вывод EXPLAIN для соединений Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Механика INNER JOIN»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужны JOIN (повторение реляционной модели)
  2. Механика INNER JOIN
  3. LEFT/RIGHT JOIN и внешние соединения
  4. Самосоединения и псевдонимы
← Назад к SQL Academy