Upload
gorancibej
View
31
Download
0
Embed Size (px)
DESCRIPTION
sql manual
Citation preview
Baze podataka
SQL Structured Query Language
Nastavnik: Prof.dr.sc. Draena Gapar
Datum: 15.04.2013.
Podupiti (Subqueries)
Podupit je SELECT iskaz ugnjeen u drugom SELECT iskazu.
Rezultat ovog unutarnjeg SELECT iskaza koristi se u vanjskom SELECT-tu kako bi se odredio sadraj konanog rezultata.
Podupit se moe koristiti na WHERE i HAVING iskazu, kao i u INSERT, UPDATE I DELETE iskazima.
Podupiti (Subqueries)
Opi oblik podupita:
SELECT stupac1, stupac2, FROM tablicaWHERE stupac {neki od operatora}
(SELECT stupacFROM tablicaWHERE uvjet)
Podupiti (Subqueries)
Tri tipa podupita:
- skalarni (scalar)vraa jedan stupac i jedan redak, tj. jednu vrijednost
- redak (row)vraa vie stupaca, ali jedan redak
- tablica (table)vraa jedan ili vie stupaca i vie redaka
Podupiti (Subqueries)
P R I M J E R :
SELECT ImePrezime, RadnoMjesto, plaa FROM djelatniciWHERE plaa=(SELECT MIN(plaa)
FROM djelatnici);
Podupiti (Subqueries)
Nain izvravanja ugnjeenih podupita:
1. unutarnji upit se izvrava jedanput i pronalazi vrijednost
2. vanjski upit se izvrava jedanput koristei vrijednost na desnoj strani uvjeta
Podupiti (Subqueries)
P R I M J E R :
Pronai sve uposlenike koji imaju isti posao kao Ana Ani:
SELECT ImePrezime, RadnoMjesto FROM djelatniciWHERE Radnomjesto=(SELECT RadnoMjesto
FROM djelatniciWHERE ImePrezime like Ana Ani);
Podupiti (Subqueries)
Podupiti koji vraaju vie od jednog retka:
ne mogu koristiti operator jednakosti (=)
koriste operator IN
operator IN oekuje listu vrijednosti IN(lista vrijednosti)
Podupiti (Subqueries)
P R I M J E R :
Pronai sve uposlenike koji imaju najniu plau u svom odjeljenjuSELECT ImePrezime, plaa, ifraOdjela FROM djelatniciWHERE plaa IN (SELECT MIN(plaa)
FROM djelatniciGROUP BY ifraOdjela);
Podupiti (Subqueries)
P R I M J E R nastavak:
SELECT ImePrezime, plaa, ifraOdjela FROM djelatniciWHERE (plaa,ifraOdjela) IN
(SELECT MIN(plaa),ifraOdjela FROM djelatniciGROUP BY ifraOdjela);
Podupiti (Subqueries)
Najee pogreke na podupitima:
podupit vraa vie od jednog retka, a koristi se operator jednakosti (=)
podupit ne vraa niti jedan redak
Podupiti (Subqueries)
P R I M J E R za HAVING:
Prikazati odjeljenja koja imaju prosjenu plau veu od prosjene plae odjeljenja 30
SELECT ifraOdjela ,AVG(plaa)FROM djelatniciHAVING AVG(plaa) > (SELECT AVG(plaa)
FROM djelatniciWHERE ifraOdjela=30)
GROUP BY ifraOdjela;
Podupiti (Subqueries)P R I M J E R (razine ugnjeivanja do 255):
Prikazati ime, posao i datum uposlenja uposlenika ija je plaa vea od najvee plae u bilo kojem Marketing odjeljenju
SELECT ImePrezime,RadnoMjesto,DatumUposlenja,plaaFROM djelatniciWHERE plaa > (SELECT MAX(plaa)
FROM djelatniciWHERE ifraOdjela=(SELECT ifraOdjela
FROM odjeliWHERE NazivOdjela like
Marketing));
Podupiti (Subqueries)
Korelacijski podupiti
-Za obradu redak po redak -Svaki SELECT se izvrava jedanput za svaki redak-Redoslijed izvravanja:
- uzima kandidat red iz vanjskog upita- izvrava unutarnji upit koristei podatke iz kandidat
reda- koristi vrijednosti iz unutarnjeg upita da kvalificira ili
diskalificira kandidat red- ponavlja dok ne obradi sve kandidat retke iz vanjskog
upita
Podupiti (Subqueries)P R I M J E R :
Pronai sve uposlenike koji imaju plau veu od prosjene u njihovom odjeljenju
SELECT ifra,ImePrezime,plaa,ifraOdjela FROM djelatnici dWHERE plaa > (SELECT AVG(plaa)
FROM djelatniciWHERE ifraOdjela=d.ifraOdjela)
ORDER BY ifraOdjela;
Podupiti (Subqueries)
Operator EXIST
-koristi se za testiranje postojanja reda s podupitom-ako postoji vrae se TRUE-ako ne postoji FALSE
Podupiti (Subqueries)
P R I M J E R :
Pronai sve uposlenike koji imaju bar jednu osobu koja im je podreena SELECT ifra,ImePrezime,RadnoMjesto,ifraOdjela FROM djelatnici dWHERE EXISTS (SELECT 1
FROM djelatnici d1WHERE d1.ifraNadreenog=d.ifra)
ORDER BY ifra;
Podupiti (Subqueries)
P R I M J E R :
Pronai odjeljenje koje nema nijednog uposlenika
SELECT ifraOdjela,NazivOdjela FROM odjeli oWHERE NOT EXISTS (SELECT 1
FROM djelatnici dWHERE d.ifraOdjela=o.ifraOdjela);
Podupiti (Subqueries)
Upute za pisanje podupita
-unutarnji upit mora biti u () i na desnoj strani uvjeta-mogu se usporeivati grupe stupaca -server prvo izvrava najdublji upit -mogu se koristiti operatori
Podupiti (Subqueries)
Osnovne znaajke podupita
-vraaju jedan ili vie redaka ili stupaca-mogu se koristiti u WHERE iskazu s AND/OR uvjetima-moe ukljuivati spajanja, set operatore i korelaciju-moe uzimati podatke iz tablice koja je razliita nego ona u vanjskom/drugom upitu -ne moe imati ORDER BY iskaz
Za vjebu
3.Prikazati sve koautore koji su suraivali na manjem broju radova od prosjenog broja radova po koautorima. Izgled izvjea:Ime koautora Prezime koautora Institucija Broj radova
4. Prikazati koautore koji nisu objavili niti jedan rad u inozemnom asopisu. Izgled izvjea:Ime koautora Prezime koautora Institucija Podruje zanimanja
Rjeenje
3.Prikazati sve koautore koji su suraivali na manjem broju radova od prosjenog broja radova po koautorima. Izgled izvjea:Ime koautora Prezime koautora Institucija Broj radova
SELECT k.ime, k.prezime, k.institucija,COUNT(*) BrRadovaFROM koautor k, suradnja sWHERE s.id_koautor=k.ifraGROUP BY k.ime, k.prezime, k.institucijaHAVING COUNT(*) (SELECT AVG(COUNT(*))
FROM projektUesnikGROUP BY id_projekt)
2. Prikazati sve profesore koji nisu vodili niti jedan projekt. Izgled izvjea:
Ime profesora Naziv profesora Titula Funkcija
SELECT pr.ime, pr.prezime, pr.titula, pr.funkcija FROM profesor prWHERE NOT EXISTS
(SELECT 1FROM projekt pWHERE p.id_profesor= pr.ifra)
P I T A NJ A ???