You are on page 1of 10

SQL:

Skupovni operatori
 U SQL-u skupovni operatori UNION, MINUS i INTERSECT (za
uniju, razliku i presek) se mogu primeniti na rezultate više
SELECT upita tako da dobijemo jedan rezultat
 Rezultati SELECT upita koje spajamo skupovnim
operatorima moraju sadržati isti broj kolona i iste tipove
podatake po kolonama
 Imena kolona u krajnjem rezultatu se preuzimaju iz prvog
SELECT upita, tako da ima smisla pisati nazive kolone samo
u prvom SELECT upitu
 ORDER BY klauzula se može koristiti samo jednom, i to na
kraju upita, pri čemu se može sortirati samo po kolonama
koje se pojavljuju u prvom SELECT-u
 Napravi upit koji za naslove koji su pozajmljivani ili ih čitaoci
trenutno drže u kolonama Šifra_Naslova i Naslov prikazuje
šifru i naslov
SELECT N.SIFN AS "Sifra naslova", N.Naziv AS
"Naslov"
FROM NASLOV N JOIN KNJIGA K ON (N.SIFN=K.SIFN)
JOIN POZAJMICA P ON (K.SIFK=P.SIFK)

UNION

SELECT N.SIFN, N.Naziv


FROM NASLOV N JOIN KNJIGA K ON (N.SIFN=K.SIFN)
JOIN DRZI D ON (K.SIFK=D.SIFK)
 Pretpostavimo da rezultate prethodnog upíta treba sortirati rastuće
po naslovu, rastuće po šifri naslova
 ORDER BY klauzula se može koristiti samo jednom, i to na kraju
upita, pri čemu se može sortirati samo po kolonama koje se
pojavljuju u prvom SELECT-u
 Preporuka je da se u ORDER BY klauzuli umesto originalnih naziva
kolona koriste aliasi kolona
SELECT N.SIFN AS "Sifa naslova", N.Naziv AS “Naslov"
FROM NASLOV N JOIN KNJIGA K ON (N.SIFN=K.SIFN)
JOIN POZAJMICA P ON (K.SIFK=P.SIFK)
UNION
SELECT N.SIFN, N.Naziv
FROM NASLOV N JOIN KNJIGA K ON (N.SIFN=K.SIFN)
JOIN DRZI D ON (K.SIFK=D.SIFK)
ORDER BY "Naslov", "Sifra naslova"
 … ili redni brojevi kolona
SELECT N.SIFN AS "Sifa naslova", N.Naziv AS "Naslov"
FROM NASLOV N JOIN KNJIGA K ON (N.SIFN=K.SIFN)
JOIN POZAJMICA P ON (K.SIFK=P.SIFK)

UNION

SELECT N.SIFN, N.Naziv


FROM NASLOV N JOIN KNJIGA K ON (N.SIFN=K.SIFN)
JOIN DRZI D ON (K.SIFK=D.SIFK)

ORDER BY 1, 2
 U prethodnom primeru, i prvi i drugi SELECT upit kada
se sami izvršavaju vraćaju rezultat u kojem se neki
redovi ponavljaju, a opet kada izvršimo prethodni upit
sa operatorom unije u rezultatu nema redova-
duplikata; ovo je iz razloga što operator UNION
eliminiše sve duplikate u rezultatu (tako da nema
potrebe uvoditi DISTINCT ako ne želimo ponavljanje
redova u rezultatu
 Ako ne želimo da se duplikati eliminišu, koristimo
operatore UNION ALL (izvršite prethodni upit sa
operatorom UNION ALL da vidite razliku u rezultatu)
 Primeri za vežbu:
1) Napiši upit (u kojem će biti korišćen operator preseka) koji u
kolonama Šifra naslova, Naslov prikazuje šifru naslova i naslov
za naslove u čijem pisanju su zajedno učestvovali (sami ili sa
još nekim) autori D. Marković i I. Todorović; rezultat sortirati
rastuće po naslovu, rastuće po šifri
2) Napiši upit koji u kolonama Naslov i Šifra naslova prikazuje
podatke o naslovima koje su pozajmili i čitalac J. Janković i
čitalac J. Jovanović, sortirano rastuće po naslovu, rastuće po
šifri
3) Napiši upit koji u kolonama Ime člana i Šifra člana prikazuje
podatke o članovima koji nisu imali nijednu pozajmicu,
sortirano rastuće po imenu, rastuće po šifri
4) Napiši upit koji u kolonama Šifra naslova, Naslov prikazuje
šifru naslova i naslov za naslove koji su rezervisani, a koje
trenutno drže čitaoci
 Napravi upit koji u kolonama Šifra autora i Ime autora prikazuje
šifru i ime autora koji su napisali naslove i iz oblasti programski
jezici i iz oblasti računarske mreže, sortirano rastuće po imenu
autora, rastuće po šifri autora
 Napravi upit koji u kolonama Šifra autora i Ime autora prikazuje
šifru i ime autora koji su napisali naslove jedino iz oblasti
programski jezici (’Programski jezici’), sortirano rastuće po
imenu autora, rastuće po šifri autora
 Moguće je kombinovati skupovne operatore
Primer: Napiši upit koji u kolonama Šifra knjige, Šifra naslova i Naslov
prikazuje podatke o knjigama koje su trenutno slobodne, a čiji naslovi su
rezervisani, sortirano rastuće po naslovu, rastuće po šifri naslova, rastuće
po šifri knjige.

You might also like