В Oracle присутствует возможность объединять выборки. Для объединения используются операторы: UNION (с вариацией UNION ALL), INTERSECT и MINUS. Рассмотрим работу всех этих операторов.
1. UNION и UNION ALL
UNION — объединяет наборы данных, но при этом исключает дублирующие записи, тоесть если у вас в первом и во втором наборе есть одинаковая запись то в результирующем наборе будет только одна такая запись.
UNION ALL — объединяет наборы данных и оставляет дублирующие записи, тоесть если в первом и во втором наборе есть одинаковые записи то в результирующем наборе будут все эти записи.
Для экспериментов, создадим две таблицы и заполним их тестовыми данными.
MERGE — Функция предназначенная для объединения результата некоторой выборки в принимающую таблицу, при этом вовсе не обязательно чтобы состав полей совпадал.
Применяется когда необходимо дополнить некоторую таблицу новыми данными, одновременно обновив уже имеющиеся в таблице данные.
Реализация:
merge into таблица_приемник t1
using (select * from таблица_источник) t2
on (t1.id = е2.id and t1.parent_id = t2.parent_id)
when matched then
-- Обновляем если совпадение в таблице t1 найдено
update
set t1.info = t2.info
when not matched then
-- Добавляем если совпадение в таблице t1 не найдено
insert
(t1.id, t1.parent_id, t1.info)
values
(t2.id, t2.parent_id, t2.info);