Соединения через USING и ON: разница и применение

🔍 Зачем нужно соединение таблиц?

Прежде чем погружаться в различия между USING и ON, давайте вспомним, зачем вообще соединять таблицы. В реляционных базах данных информация часто разделена на логические таблицы, и соединение позволяет нам объединять данные из разных таблиц в один результат.

-- Например, у нас есть таблицы:
CREATE TABLE users (
    user_id INT PRIMARY KEY,
    name VARCHAR(100)
);

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    amount DECIMAL(10,2),
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

Без соединений нам пришлось бы делать два запроса и вручную связывать данные в приложении. Но SQL дает нам мощные инструменты для этого!


🤝 JOIN с ON — универсальный инструмент

Соединение через ON — это самый гибкий способ указать условия соединения. Вы можете:

  • Соединять таблицы по любым полям (даже если они называются по-разному)
  • Добавлять дополнительные условия прямо в JOIN
  • Использовать сложные выражения в условиях
-- Классический пример соединения через ON
SELECT u.name, o.order_id, o.amount
FROM users u
JOIN orders o ON u.user_id = o.user_id;

🔥 Важные особенности ON:

  1. Условия могут быть любыми: ON table1.id = table2.user_id AND table1.status = 'active'
  2. Можно соединять по разным именам столбцов: ON u.client_id = o.customer_id
  3. Поддерживаются все типы JOIN: INNER, LEFT, RIGHT, FULL

✨ USING — элегантное сокращение

USING — это специальный синтаксис для случаев, когда соединяемые столбцы имеют одинаковые имена в обеих таблицах. Это делает код чище и понятнее.

-- Тот же запрос, но с USING
SELECT u.name, o.order_id, o.amount
FROM users u
JOIN orders o USING (user_id);

🎯 Когда особенно полезен USING:

  1. В таблицах соблюдены соглашения об именовании
  2. Соединение выполняется по первичному и внешнему ключам
  3. Хочется сделать запрос более читаемым

🥊 ON vs USING: главные различия

Особенность ON USING
Имена столбцов Могут быть разными Должны совпадать
Читаемость Более подробный Более лаконичный
Гибкость Полная (любые условия) Только по общим столбцам
Результат в SELECT * Оба столбца в выводе Один общий столбец
-- Пример с SELECT * 
-- С ON:
SELECT * FROM users JOIN orders ON users.user_id = orders.user_id;
-- Результат: users.user_id, orders.user_id, name, order_id, amount...

-- С USING:
SELECT * FROM users JOIN orders USING (user_id);
-- Результат: user_id, name, order_id, amount... (один user_id)

🛠 Практические примеры из реальной жизни

1. Многотабличное соединение с USING

-- Таблицы: departments (dept_id, name), employees (emp_id, name, dept_id), projects (proj_id, name, dept_id)
SELECT d.name AS department, 
       e.name AS employee, 
       p.name AS project
FROM departments d
JOIN employees e USING (dept_id)
JOIN projects p USING (dept_id);

2. Сложное соединение с ON

-- Находим заказы активных пользователей с суммой > 1000
SELECT u.name, o.order_id, o.amount
FROM users u
JOIN orders o ON u.user_id = o.user_id 
              AND u.status = 'active'
              AND o.amount > 1000;

💡 Профессиональные советы

1. Используйте USING, когда:

  • Столбцы называются одинаково
  • Важна читаемость и лаконичность
  • Работаете с соглашениями о наименованиях

2. Выбирайте ON, когда:

  • Нужны сложные условия соединения
  • Имена столбцов разные
  • Требуется дополнительная фильтрация прямо в JOIN

3. Стиль кода: В крупных проектах лучше придерживаться единого стиля — либо только ON, либо USING для одинаковых имен.


🚀 Вывод: что выбрать?

Оба оператора имеют право на жизнь!

ON — это швейцарский нож: мощный и универсальный.
USING — специальный инструмент: элегантный и лаконичный в подходящих случаях.

Попробуйте переписать несколько своих запросов с ON на USING (где это уместно) — вы почувствуете, насколько может стать чище код!

Скрыть рекламу навсегда

📘 VK Видео — обучение без ограничений

Все уроки доступны без VPN, без блокировок и зависаний.

Можно смотреть с телефона, планшета или компьютера — в любое время.

▶️ Смотреть на VK Видео