-- Grad(oznaka, ime, populacija) -- Let(brLeta, datum, regBr, odGrad, doGrad) -- Avion(regBr, model, nosivost, brSjedista) -- Putnik(jmbg, ime, prezime, datum_rodjenja) -- Rezervacija(brLeta, jmbg, klasa, sjediste, cijena) -- a) Za svakog putnika naći ukupnu cijenu karata koje je rezervisao pod -- uslovom da je ta ukupna cijena veća od 100. SELECT r.jmbg, SUM(R.cijena) AS UkupnaCijena FROM rezervacija r GROUP BY r.jmbg HAVING SUM(r.cijena) > 100 -- b) Za svaki let izlistati ukupan broj putnika koje su rezervisali karte za taj -- let pod uslovom da je broj putnika veći od 10. SELECT r.brLeta, COUNT(*) AS BrojPutnika FROM rezervacija r GROUP BY r.brLeta HAVING COUNT(*) > 10 -- c) Naći destinaciju na kojima je bilo najviše letova. select distinct l.odGrad, l.doGrad from let l WHERE ( SELECT COUNT(*) FROM let WHERE odGrad = l.odGrad AND doGrad = l.doGrad ) >= ALL ( SELECT COUNT(*) FROM let GROUP BY odGrad, doGrad ) -- d) Naći avione koji su letjeli na bar dvije različite destinacije -- (Smatra se da je destinacija Podgorica-Beograd različita od Beograd-Podgorica). SELECT t.regBr FROM ( SELECT DISTINCT l.regBr, l.odGrad, l.doGrad FROM let l ) AS t GROUP BY t.regBr HAVING COUNT(*) > 1 -- e) Naći ime najposjećenijeg grada. SELECT g.ime FROM grad g WHERE ( SELECT COUNT(*) FROM rezervacija r, let l WHERE r.brLeta = l.brLeta AND l.doGrad = g.oznaka ) >= ALL ( SELECT COUNT(*) FROM rezervacija r, let l where r.brLeta = l.brLeta GROUP BY l.doGrad ) -- f) Naći parove putnika koji su letjeli istim avionima. (bar jednom) SELECT distinct r1.jmbg, r2.jmbg FROM rezervacija r1, let l1, rezervacija r2, let l2 WHERE r1.brLeta = l1.brLeta AND r2.brLeta = l2.brLeta AND l1.regBr = l2.regBr AND r1.jmbg < r2.jmbg -- g) Naći imena gradova do kojih je sletjelo više od deset različitih aviona SELECT g.ime FROM grad g, let l WHERE g.oznaka = l.doGrad GROUP BY g.oznaka, g.ime HAVING COUNT (DISTINCT l.regBr) > 10 -- h) Naći putnike koji se se vozili avionom koji je imao najviše letova. -- prvi nacin SELECT DISTINCT r.jmbg FROM rezervacija r, let l WHERE r.brLeta = l.brLeta AND ( SELECT COUNT(*) FROM let WHERE regBr = l.regBr ) >= ALL ( SELECT COUNT(*) FROM let GROUP BY regBr ) -- Uzeti te avione, pa iskoristiti IN SELECT DISTINCT r.jmbg FROM rezervacija r, let l WHERE r.brLeta = l.brLeta AND l.regBr IN ( SELECT a.regBr FROM avion a WHERE ( SELECT COUNT(*) FROM let WHERE regBr = a.regBr ) >= ALL ( SELECT COUNT(*) FROM let GROUP BY regBr ) ) -- i) Naći putnike koji su se vozili svim avionima. SELECT * FROM putnik p WHERE ( SELECT COUNT(DISTINCT l.regBr) FROM rezervacija r, Let l WHERE r.jmbg = p.jmbg AND l.brLeta = r.brLeta ) = ( SELECT COUNT(*) FROM avion ) -- j) Naći gradove do kojih saobraćaju isključivo avioni modela 'BOEING'. SELECT g.oznaka FROM grad g WHERE NOT EXISTS ( SELECT * FROM let l, avion a WHERE l.regBr = a.regBr AND l.doGrad = g.oznaka AND a.model <> 'BOEING' ) -- k) Naći datume letova na kojem je bilo najviše putnika. SELECT l.datum FROM let l WHERE ( SELECT COUNT(*) FROM rezervacija r WHERE r.brLeta = l.brLeta ) >= ALL ( SELECT COUNT(*) FROM rezervacija r GROUP BY r.brLeta ) -- m) Naći putnika koji je rezervisao najviše karata. SELECT * FROM putnik p WHERE ( SELECT COUNT(*) FROM rezervacija r WHERE r.jmbg = p.jmbg ) >= ALL ( SELECT COUNT(*) FROM rezervacija r GROUP BY r.jmbg ) -- o) Naći avione koji sleću u svim gradovima koji imaju više od 20000 stanovnika SELECT * FROM avion a WHERE ( SELECT COUNT(DISTINCT l.doGrad) FROM let l, grad g WHERE l.regBr = a.regBr AND l.doGrad = g.oznaka AND g.populacija > 20000 ) = ( SELECT COUNT(*) FROM grad WHERE populacija > 20000 )