Ako se želi raditi sa više tabela u jednom upitu, ili sa više upita koji treba da rezultat spakuju u jedno rešenje, postoji više načina na koji se to može izvesti.

Jedan način kako predstaviti rezultate više upita zajedno, a da se ne koristi JOIN, već operator UNION:


operator: UNION

Operator UNION (unija, kao u skupovima) se koristi za kombinovanje rezultata dva ili više SQL upita.

Ipak, ne može uvek da se upotrebi. Postoje uslovi koji moraju biti zadovoljeni da bi se mogao koristiti:

  • Svaki SELECT iskaz u okviru unije mora da daje isti broj kolona
  • Kolone moraju da imaju slične tipove podataka
  • redosled kolona sa sličnim tipovima podataka treba da je isti u oba SELECT iskaza u uniji
Sintaksa za UNION:
SELECT kolone FROM tabela1
UNION
SELECT kolone FROM tabela2;

Operator UNION će da selektuje samo vrednosti koje se ne ponavljaju, što je za uniju podrazumevano (isto kao u matematici). Da bi se dozvolili duplikati, koristi se UNION ALL:

Sintaksa za UNION ALL:
SELECT kolone FROM tabela1
UNION ALL
SELECT kolone FROM tabela2;

Napomena: imena kolona u rezultatu su obično jednaka imenima kolona u prvom SELECT iskazu u okviru unije.

Primer:

Ako imamo bazu u kojoj su, između ostalih, dve tabele: Kupci i Prodavci:

Deo tabele Kupci je ispod:

Kupci
kupacID
imeKupca kontaktOsoba adresa
grad postanskiBroj drzava
1 Pera Simić
Sima Simić
Kopernikova 23
Novi Sad
21000 Srbija
2 Ana Matić
Saša Matić
Mataderos 2312 Meksiko grad
05021 Meksiko
3 Nikola Nikolić
Marija Jovanović
49 Gilbert St. London EC1 4SD UK

Deo tabele Prodavci je ispod:

Prodavci
prodavacID
imeProdavca kontaktOsoba adresa
grad postanskiBroj drzava
1 Exotic Liquid
Charlotte Cooper
51 Gilbert St.
London
EC1 4SD UK
2 Aleksandar Cosmetics
kol centar
Miše Dimitrijevića 1 Novi Sad
21000 Srbija
3 Grandma Kelly's Homestead
Regina Murphy
707 Oxford Rd. Ann Arbor E48104 USA


PRIMER korišćenja operatora UNION:

Sledeći iskaz treba da isporuči gradove (bez ponavljanja imena grada) iz obe tabele:

SELECT grad FROM Kupci
UNION
SELECT grad FROM Prodavci
ORDER BY grad;

Napomena: Ako neki kupci ili prodavci žive u istom gradu, svaki grad će biti naveden samo jednom. Zo je zbog toga što unija selektuje samo vrednosti koje se ne ponavljaju. Ako se ipak želi navesti i duplikate, tada treba koristiti UNION ALL.


PRIMER korišćenja operatora UNION ALL:
Sledeći iskaz treba da isporuči gradove (uključujući i ponavljanja imena grada) iz obe tabele:

SELECT grad FROM Kupci
UNION ALL
SELECT grad FROM Prodavci
ORDER BY grad;


SQL UNION sa WHERE klauzulom

Sledeći iskaz treba da isporuči gradove iz Srbije (bez ponavljanja imena grada) iz obe tabele:

SELECT grad, drzava FROM Kupci
WHERE drzava='Srbija'
UNION
SELECT grad, drzava FROM Prodavci
WHERE drzava='Srbija'
ORDER BY grad;


SQL UNION ALL sa WHERE klauzulom

Sledeći iskaz treba da isporuči gradove iz Srbije (uključujući i ponavljanja imena grada) iz obe tabele:

SELECT grad, drzava FROM Kupci
WHERE drzava='Srbija'
UNION ALL
SELECT grad, drzava FROM Prodavci
WHERE drzava='Srbija'
ORDER BY grad;


Primere možete isprobati online:

****

Dodatno: na online platformi možete isprobati sve primere sa časa, ali na njihovoj demo bazi:

SELECT * FROM Customers;
SELECT * FROM Suppliers;
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers;

SELECT City FROM Customers
WHERE Country='USA'
UNION
SELECT City FROM Suppliers
WHERE Country='USA';
SELECT City FROM Customers
WHERE Country='Germany'
UNION ALL
SELECT City FROM Suppliers
WHERE Country='Germany'
ORDER BY City DESC;
SELECT City AS 'GRAD' FROM Customers
WHERE Country='Argentina';

SELECT COUNT(City) AS 'Broj gradova' FROM Customers;
SELECT COUNT(City) AS 'Broj gradova', Country AS 'Država' FROM Customers
GROUP BY Country;

****

A možete pogledati i video lekciju predavača sa Stanford univerziteta:

(

| Transcript | SQL Script) - UNION počinje na 4:06 , ali bi trebalo znati i ostalo iz ovoga videa


Last modified: Thursday, 8 February 2024, 4:28 PM