
Date su sledeće relacione šeme:
Grad(Naziv, Drzava, BrojStanovnika)
Dvorana(DID, Kapacitet, Naziv references Grad)
Koncert(KID, JMBG references Izvodjac, Trajanje, DID refences Dvorana)
Izvodjac(JMBG, Ime, Adresa, Starost)
Ulaznica(UID, KID references Koncert, Cijena, Tip)
Napomena. Primarni ključevi su podvučeni. Atribut Ime u relacionoj šemi Dvorana je spoljnji ključ na relacionu šemu Grad i označava u kom gradu se nalazi dvorana. Atribut JMBG u relacionoj šemi Koncert je spoljnji ključ na relacionu šemu Izvođač i označava koji izvođač je nastupao na koncertu. U relacionoj šemi Koncert atribut DID je spoljnji ključ na relacionu šemu Dvorana i označava u kojoj dvorani je održan koncert.
a) Izlistati ime izvođača, kao i broj različitih gradova u kojima je izvođač održao koncerte pod uslovom da je taj broj veći od 10.
SELECT i.Ime, COUNT(DISTINCT d.Naziv) as BrGradova FROM Izvodjac i, Koncert k, Dvorana d
WHERE k.JMBG = i.JMBG AND k.DID = d.DID
GROUP BY i.Ime
HAVING BrGradova > 10
b) Naći koncerte za koji je prodato više VIP ulaznica tipa nego ostalih karata. Napomena. VIP ulaznice su one karte čiji je Tip jednak VIP.
SELECT k.* FROM Koncert k
WHERE (SELECT COUNT(*) FROM ULAZNICA u1
WHERE u1.KID = k.KID AND u1.Tip = 'VIP') > (SELECT COUNT(*) FROM Ulaznica u2
WHERE u2.KID = k.KID and u2.Tip != 'VIP')
c) Naći izvođače koji nastupaju isključivo u dvoranama koje imaju kapacitet veći od kapaciteta najveće dvorane u Podgorici.
SELECT i.* FROM Izvodjac i, Koncert k, Dvorana d
WHERE NOT EXISTS(SELECT * FROM Koncert k, Dvorana d
WHERE k.JMBG = i.JMBG AND k.DID = d.DID AND d.Kapacitet < (SELECT MAX(d1.Kapacitet) FROM Dvorana d1
WHERE d1.Grad = 'Podgorica'))
d) Naći parove JMBG, Naziv tako da izvođač koji je identifikovan atributom JMBG nikada nije održao koncert u gradu koji je identifikovan atributom Naziv.
SELECT i.JMBG, g.Naziv FROM Izvodjac i, Grad g
WHERE NOT EXISTS(SELECT * FROM Koncert k, Dvorana d
WHERE k.JMBG = i.JMBG AND k.DID = d.DID AND d.Naziv = g.Naziv)
e) Naći ime grada u kome je nastupao svaki izvođač.
SELECT g.Naziv FROM Grad g
WHERE NOT EXISTS (SELECT * FROM Izvodjac i
WHERE NOT EXISTS (SELECT * FROM Koncert k, Dvorana d
WHERE k.JMBG = i.JMBG AND k.DID = d.DID AND d.Naziv = g.Naziv))
f) Naći koncert za koji je prodato najviše ulazica.
SELECT u.KID, COUNT(*) as ProdateUlaznice FROM Ulaznica u
GROUP BY u.KID
HAVING ProdateUlazince = (SELECT MAX(PrUlazn) FROM (SELECT COUNT(*) as PrUlazn FROM Ulaznica u1
GROUP BY u1.KID))
g) Naći države u kojima je nastupao izvođač koji je do sada imao najveći broj koncerata.
SELECT g.Drzava FROM Grad g, Izvodjac i, Koncert k, Dvorana d
WHERE k.JMBG = i.JMBG AND k.DID = d.DID AND d.Naziv = g.Naziv AND (SELECT COUNT(*) FROM Koncert k1
WHERE k1.JMBG = i.JMBG) >= ALL (SELECT BrKoncerata FROM (SELECT k2.JMBG, COUNT(*) as BrKoncerata FROM Koncert k2 GROUP BY k2.JMBG)
h) Naći grad takav da je u njemu održano više od deset koncerata i nijedan izvođač nije nastupao dva puta u tom gradu.
SELECT d.Naziv, COUNT(*) FROM Dvorana d, Koncert k,
WHERE k.DID = d.DID AND NOT EXIST (SELECT i.JMBG, COUNT(*) FROM Izvodjac i, Koncert k1, Dvorana d1
WHERE k1.JMBG = i.JMBG AND k1.DID = d1.DID AND d1.Naziv = d.Naziv
GROUP BY i.JMBG
HAVING COUNT(*) >= 2)
GROUP BY d.Naziv
HAVING COUNT(*) > 10
i) Naći izvođača koji je imao najviše rasprodatih koncerata. Napomena. Koncert je rasprodat ako je broj prodatih ulaznica jednak kapacitetu dvorane u kojoj je održan koncert.
SELECT k.JMBG, COUNT(*) from Koncert k, Dvorana d
WHERE k.DID = d.DID AND (SELECT COUNT(*) FROM Ulaznica u WHERE u.KID = k.KID) = d.Kapacitet
GROUP BY k.JMBG
HAVING COUNT(*) = (SELECT MAX(COUNT(*)) FROM (SELECT k1.JMBG, COUNT(*) FROM Koncert k1, Dvorana d1
WHERE k1.DID = d1.DID AND (SELECT COUNT(*) FROM Ulaznica u1 WHERE u1.KID = k1.KID) = d1.Kapacitet)
GROUP BY k1.JMBG)
j) Naći izvođača koji je u svakoj dvorani imao makar dva koncerta.
SELECT i.* FROM Izvodjac i
WHERE NOT EXISTS (SELECT d.DID, COUNT(*) FROM Dvorana d, Koncert k WHERE d.DID = k.DID AND k.JMBG = i.JMBG
GROUP BY d.DID HAVING COUNT(*) < 2) AND NOT EXISTS (SELECT d1.DID FROM Dvorana d1 WHERE NOT EXISTS(SELECT * FROM Koncert k1 WHERE k1.DID = d1.DID AND k1.JMBG = i.JMBG ))
[Ovu poruku je menjao MaelstroM dana 16.01.2012. u 21:53 GMT+1]