ON в Oracle SQL — как задавать условия соединения таблиц

🟢ON в Oracle SQL. Введение

Когда мы объединяем таблицы в SQL с помощью JOIN, нам нужно указать, по каким условиям строки из этих таблиц должны быть связаны. Для этого и используется оператор ON. Он определяет условие соединения и влияет на результат запроса.

ON также используется в операторах MERGE, когда мы сопоставляем строки из источника и цели.


🔤 Написание

sql
SELECT ...
FROM таблица1
JOIN таблица2
ON таблица1.ключ = таблица2.ключ;

Можно использовать:

  • Логические условия (=, <>, >, IS NULL, и т.д.)

  • Сложные выражения

  • Несколько условий с AND или OR


🔄 Где часто используется

  • При объединении таблиц (JOIN)

  • В MERGE для сопоставления строк

  • При объединении с представлениями

  • В подзапросах с JOIN

  • В аналитических запросах


🧪 10 Примеров использования ON с пояснениями

1️⃣ Простой INNER JOIN по ID

sql
SELECT e.name, d.department_name
FROM employees e
JOIN departments d
ON e.department_id = d.department_id;

Сопоставление сотрудников и отделов.


2️⃣ LEFT JOIN с условием ON

sql
SELECT c.name, o.order_date
FROM customers c
LEFT JOIN orders o
ON c.id = o.customer_id;

Клиенты с заказами и без.


3️⃣ JOIN с несколькими условиями

sql
SELECT *
FROM a
JOIN b
ON a.id = b.a_id AND a.status = b.status;

Соединение по двум полям.


4️⃣ ON с вычисляемым выражением

sql
SELECT *
FROM orders o
JOIN shipping s
ON o.shipping_id = s.id AND s.price < 100;

Сопоставляем и фильтруем одновременно.


5️⃣ MERGE с ON для сопоставления строк

sql
MERGE INTO employees e
USING new_employees n
ON (e.id = n.id)
WHEN MATCHED THEN
UPDATE SET e.salary = n.salary
WHEN NOT MATCHED THEN
INSERT (id, name, salary) VALUES (n.id, n.name, n.salary);

ON используется как критерий для обновления или вставки.


6️⃣ JOIN по несвязанным таблицам

sql
SELECT *
FROM employees e
JOIN bonus_rules b
ON e.department_id = b.dept_id AND e.salary > b.threshold;

Условие соединения включает фильтрацию.


7️⃣ JOIN с подзапросом

sql
SELECT e.name, r.role
FROM employees e
JOIN (
SELECT * FROM roles WHERE active = 1
) r
ON e.role_id = r.id;

Подзапрос с фильтрацией + ON соединение.


8️⃣ JOIN с IS NULL в ON

sql
SELECT *
FROM tasks t
LEFT JOIN users u
ON t.assigned_to = u.id AND u.active = 1;

Объединяем даже если пользователь не найден.


9️⃣ ON с OR (осторожно)

sql
SELECT *
FROM x
JOIN y
ON x.code = y.code OR x.alt_code = y.alt_code;

Менее эффективный, но допустимый вариант.


🔟 JOIN с BETWEEN в ON

sql
SELECT *
FROM logs l
JOIN time_periods t
ON l.created_at BETWEEN t.start_date AND t.end_date;

Объединение по диапазону дат.


🧩 Заключение

Оператор ON — это основа всех логик объединения данных в Oracle SQL. Именно он определяет, какие строки из одной таблицы «совпадают» со строками другой таблицы. Грамотно составленное условие ON гарантирует корректность результатов.

💡 Запомни:

  • Используется в JOIN и MERGE

  • Определяет условия соединения

  • Поддерживает сложные выражения

  • Может сочетаться с AND, OR, IS NULL, BETWEEN и др.

  • Работает с подзапросами и представлениями


🔜 Следующая статья будет:

VALUES в Oracle SQL — как правильно вставлять данные и использовать значения в подзапросах


 

Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии