You are on page 1of 4

UVOD U RELACIONE BAZE PODATAKA

zadaci sa vezbi
Vesna Pavlovic
25. novembar 2010.

SQL - zadaci za ve
zbu
Baza podataka SPJ:
S(SRBR,SIME,STATUS,GRAD) - snabdevaci
P(PRBR,PIME,BOJA,TEZINA) - delovi
J(JRBR,JIME,GRAD) - projekti
SPJ(SRBR,PRBR,JRBR,KOL) - isporuke
1. Izdvojiti koliko ima razli
citih koli
cina isporuka, a da koli
cina nije
500.
select count(distinct nullif(kol,500)) br
from spj
select count(distinct kol) br
from spj
where kol <> 500
2. Izdvojiti ukupnu te
zinu svih isporuka u tonama (ako je te
zina
data u kg) takvih da isporuka ima ve
cu koli
cinu od prose
cne
isporuke.
select sum(kol*tezina/1000.0) uk_tezina
from spj join p
on spj.prbr = p.prbr
where kol > (select avg(kol+0.0) from spj)
3. Za sve snabdeva
ce izdvojiti ime snabdeva
ca i broj njegovih isporuka (ako ne postoji nijedna - izdvojiti 0).

select sime, count(prbr) br_isp


from spj right outer join s
on spj.srbr = s.srbr
group by sime
select sime, count(*) br_isp
from spj join s on spj.srbr = s.srbr
group by sime
union
select sime, 0
from s
where not exists
(select * from spj
where srbr = s.srbr)

4. Izdvojiti broj snabdeva


ca koji imaju vi
se od 3 isporuke.
with vise_od_tri as
(select srbr, count(*) n
from spj
group by srbr
having count(*) > 3)
select count(*) br
from vise_od_tri
5. Izdvojiti gradove u kojima se nalaze 3 snabdeva
ca sa najve
cim
statusima.
select grad
from s s1
where status is not null and
2 >= (select count(*) from s where status > s1.status)
6. Za sve snabdeva
ce izdvojiti broj isporuka koje idu u Pariz i broj
isporuka koje idu u London (sve podatke obraditi u jednom prolazu kroz tabelu SPJ).
select srbr, sum (case
when
else
end)
sum (case
when
else

grad = London then 1


0
u_london,
grad = Pariz then 1
0
2

end) u_pariz
from spj join j on spj.jrbr = j.jrbr
group by srbr
7. Izdvojiti podatke o isporukama koje idu iz nekog grada u isti
grad (tj. snabdeva
ci su u istom gradu kao i projekti kojima idu
isporuke).
8. Izdvojiti parove gradova takve da u prvom postoje snabdeva
ci,
a u drugom projekti, ali ne postoje isporuke iz prvog u drugi
grad.
select distinct s.grad, j.grad
from s s1, j j1
where not exists
(select *
from spj join s on spj.srbr = s.srbr
join j on spj.jrbr = j.jrbr
where s.grad = s1.grad and j.grad = j1.grad)
ili:
select s.grad, j.grad
from s,j
except
select s.grad, j.grad
from spj join s on spj.srbr = s.srbr
join j on spj.jrbr = j.jrbr
9. Izdvojiti koliko ima snabdeva
ca i koliko ima projekata u kom
gradu. Rezultat mora biti tabela od 3 kolone:
a) grad
b) broj snabdeva
ca u gradu
c) broj projekata u gradu
with a as
(select grad, count(*) br_s
from s
group by grad),
b as
(select grad, count(*) br_p
from p
group by grad),
c as
(select grad from s
3

union
select grad from j)
select grad, case when exists
(select * from a where grad = c.grad)
then
(select br_s from a where grad = c.grad)
else 0
end br_srbr,
case when exists
(select * from b where grad = c.grad)
then
(select br_j from b where grad = c.grad)
else 0
end br_jrbr
from c
10. Prona
ci koji projekti jedini koriste neke delove.
11. Za svaki grad izra
cunati koja je boja delova najzastupljenija u
projektima u tom gradu.
with pom as
(select j.grad, p.boja, count(*) po_boji
from j join spj on j.jrbr = spj.jrbr
join p on p.prbr = spj.prbr
group by j.grad, p.boja
)
select grad, boja
from pom p
where po_boji = (select max(po_boji)
from pom where grad = p.grad)

12. Izra
cunati parove snabdeva
ca koji nisu neposredna konkurencija
jedan drugom (tj. ne isporu
cuju isti deo istom projektu).

You might also like