SQL: Operacje na zbiorach ( UNION, UNION ALL, MINUS, INTERSECT )

Zapytanie SQL zwraca zbiór rekordów. Oracle SQL pozwala na podstawowe operacje na zbiorach.

UNION ALL

Jesli zapytania połaczymy operatorem UNION ALL to zwracany jest zbiór rekrdów będący sumą rekordów z poszczególnych zapytań:

select 1 as col from dual
union all
select 2 from dual 

COL
----------
1
2

Jeśli rekordy występują w wielu zapytaniach to będą powtarzać się w wyniku:

select 1 as col from dual
union all
select 1 from dual
/

COL
----------
  1
  1

Na ratunek przy chodzi operator:

UNION

Operator UNION zwraca unikalne rekordy z zapytań połączonch.

select 1 as col from dual
union
select 1 from dual
/

COL
----------
  1

I mamy tylko 1 rekord, bo jest taki sam w pierwszym i drugim zapytaniu.

MINUS

Operator MINUS zwraca różnicę zbiorów

select 1 as col from dual
 minus
 select 1 from dual
 /

nie wybrano żadnych wierszy

Nic! Brak rekordów istniejących w pierwszym zapytaniu, a nie istniejących w drugim.


select 1 as col from dual
minus
select 2 from dual
/


COL
----------
  1

Jeden rekord jest zwracany. Należy podkreślić, że rekordy z drugiego zapytania nie są zwracane.

INTERSECT 

I ostatni operator to INTERSECT

Zwraca on część wspólną zbiorów. Rekordy istniejące w jednym i drugim zapytaniu:

select 1 as col from dual
intersect
select 2 from dual
/

nie wybrano żadnych wierszy

Nic! Zapytania nie zawierają elementów wspólnych.

Uwaga! Operatory UNION, MINUS i INTERSECT zwracają unikalne rekordy. Oznacza to, że ich wykonanie wymaga kosztownej operacji sortowania.
Operator UNION ALL nie sortuje rekordów. Zatem, jeśli jest to możliwe, należy używac operatora UNION ALL zamiast UNION.

Leave a Reply

Szachy Ursus