14_SQL. Działania na zbiorach SQL: operator UNION

Dzisiaj poznamy operator UNION. Relacyjne bazy danych umożliwiają działania na zbiorach SQL Oracle. Bazy danych składają się z rekordów, które podlegają grupowaniu, segregowaniu, wydzielaniu i szukaniu części wspólnych. 

 Prowadząc  działania na zbiorach SQL wykorzystuje się operatory teoriomnogościowe. 

Argumentami operatorów teoriomnogościowych muszą być dane składające się z tej samej ilości kolumn

Działania na zbiorach SQL prowadzi się używając następujących operatorów teoriomnogościowych:

Skorzystamy z tabel EMPLOYEES, JOBS z bezpłatnej bazy Oracle HR dostępnej tutaj:

http://www.oracle.com/technetwork/database/express-edition/downloads/index.html

 

Operator UNION

Operator UNION służy do łączenia tabel. Spróbujmy połączyć obie tabele zwykłą instrukcją SELECT i FROM.

SELECT SALARY, MIN_SALARY

FROM EMPLOYEES, JOBS;

Otrzymujemy tabelę wynikową:

Uzyskaliśmy iloczyn kartezjański czyli kombinację wszystkich wierszy z pierwszej tabeli ze wszystkimi wierszami drugiej tabeli. Instrukcja była więc błędna. Teraz zostanie użyty operator UNION.

SELECT SALARY

FROM EMPLOYEES

UNION

SELECT MIN_SALARY

FROM JOBS;

Otrzymujemy tabelę wynikową:

Otrzymaliśmy wszystkie indywidualne wartości ze zbioru EMPLOYEES i wszystkie indywidualne wartości ze zbioru JOBS. To tak ja byśmy użyli tabeli przestawnej aby wylistowała wszystkie wartości bez powtórzeń. UNION łączy więc wszystkie liczby obu zbiorów eliminuje powtarzające się wartości i przedstawia to w formie posortowanej rosnąco listy.

 Operatory teoriomnogościowe (UNION, INTERSEC, MINUS) eliminują domyślnie z tabeli wynikowej powtarzające się wiersze , co odpowiada omówionej wcześniej klauzuli DISTINCT. 

Gdybyśmy chcieli zrezygnować z eliminacji powtórek, możemy zastosować UNION ALL.

SELECT SALARY

FROM EMPLOYEES

UNION ALL

SELECT MIN_SALARY

FROM JOBS;

Otrzymujemy tabelę wynikową:

Operator UNION ALL wylistował obie wskazane w tabelach kolumnach, zachowując ich kolejność i powtarzające się wartości. Czerwona linia wskazuje gdzie kończy się tabela EMPLOYEES a zaczyna tabela JOBS.