130 likes | 345 Views
SQL Structured Query Language. GRUPNI UPITI. SELECT [ALL|DINSTICT] nazivi kolona, agregatne kolone FROM nazivi_tablica|join veze [WHERE uvjetni izraz] [GROUP BY nazivi kolona] [HAVING uvjetni izraz] [ORDER BY sort_izraz]
E N D
GRUPNI UPITI • SELECT [ALL|DINSTICT] nazivi kolona, agregatne kolone FROM nazivi_tablica|join veze [WHERE uvjetni izraz] [GROUP BY nazivi kolona] [HAVING uvjetni izraz] [ORDER BY sort_izraz] GROUP BY – određuje grupe po kojima se dijele izlazni rezultati, dobiveni pomoću select izraza, te primjenu agregatnih funkcija nad pojedinim grupama • redovi izlaznog rezultata select izraza koji u svim kolonama navedenim u GROUP BY izrazu imaju iste vrijednosti povezuju se u istu grupu, nad kojom se može zadati agregatna funkcija SELECT STUDENT.STUDENT_ID, IME, PREZIME, BROJ=COUNT(SEM) FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT.ID=UPISNI_LIST.STUDENT_ID GROUP BY STUDENT.STUDENT_ID, IME, PREZIME
GRUPNI UPITI • HAVING uvjetni izraz • ograničenje izlaznih rezultata po zadanom uvjetu nakon izvršenja GROUP BY operacije • WHERE – ograničava izlazne rezultate prije grupiranja (uvjetuje broj redova koji ulaze u grupiranje) • HAVING - ograničava izlazne rezultate poslije grupiranja pogrešno: SELECT STUDENT.STUDENT_ID, IME, PREZIME, BROJ=COUNT(SEM) FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT.ID=UPISNI_LIST.STUDENT_ID GROUP BY STUDENT.STUDENT_ID, IME, PREZIME HAVING SK_GOD>’1997/98’
UGNJEŽĐENI UPITI - PODUPITI • SELECT izraz uključen u glavni SELECT, INSERT, UPDATE ili DELETE upit • upit koji uključuje podupit, svoj uvjetni dio izraza temelji na rezultatima koji su dobiveni izvršenjem podupita • podupit se uključuje u glavni upit u uvjetnom dijelu izraza (WHERE ili HAVING) • SELECT [ALL|DINSTICT] nazivi kolona, agregatne kolone FROM nazivi_tablica|join veze [WHERE uvjet=subquery] [GROUP BY nazivi kolona] [HAVING uvjet=subquery] • najprije se izvršava podupit, a rezultati koje da je podupit postaju dio uvjetnog izraza glavnog upita
UGNJEŽĐENI UPITI - PODUPITI • PODUPITI LISTE • vraća niz rezultata (listu), koju glavni upit koristi u svom uvjetnom izrazu preko predikata liste (IN) SELECT STUDENT_ID, IME, PREZIME FROM STUDENT WHERE STUDENT_ID IN (SELECT STUDENT_ID FROM UPISNI_LIST WHERE SK_GOD=‘1999’ AND SEM=1) ORDER BY PREZIME, IME
UGNJEŽĐENI UPITI - PODUPITI 2. PODUPITI SA OPERATOROM USPOREDBE • rezultat podupita uključuje se u glavni upit preko jednog od predikata usporedbe (=, <>,<…) • podupit vraća samo jednu vrijednost, a ne kao pod 1. listu vrijednosti SELECT STUDENT_ID, IME, PREZIME FROM STUDENT WHERE MJESTU_ID=(SELECT MJESTO_ID FROM STUDENT WHERE IME=‘X’ AND PREZIME=‘Y’) ORDER BY PREZIME, IME DELETE UPISNI_LIST WHERE STUDENT_ID=(SELECT STUDENT_ID FROM STUDENT WHERE IME=‘X’ AND PREZIME=‘Y’) AND SEM=1
UGNJEŽĐENI UPITI - PODUPITI 3. KORELIRANI PODUPITI • izračunavanje podupita ovisi o glavnom upitu, tj. podupit se izvodi za svaki podatak glavnog upita • podupit nezavisan od glavnog upita i izvodi se samo jednom: SELECT * FROM STUDENT WHERE MJESTO_ID= (SELECT MJESTO_ID FROM MJESTO WHERE IME_MJESTA=‘OSIJEK’) • isto pomoću koreliranog upita: SELECT * FROM STUDENT WHERE ‘OSIJEK’=(SELECT IME_MJESTA FROM MJESTO WHERE STUDENT.MJESTO_ID=MJESTO.MJESTO_ID)
UGNJEŽĐENI UPITI - PODUPITI • PODUPITI SA PREDIKATOM POSTOJANJA (EXISTS, NOT EXISTS) • operator EXISTS ispituje postojanje podataka uz navedene uvjete • uvjetni izraz glavnog upita ispituje postojanje podataka koje vraća podupit SELECT STUDENT_ID, IME, PREZIME FROM STUDENT WHERE NOT EXISTS (SELECT * FROM UPISNI_LIST WHERE STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID) SELECT * FROM MJESTO WHERE EXISTS (SELECT * FROM STUDENT WHERE MJESTO.MJESTO_ID=STUDENT.MJESTO_ID)
UNIJA • upit_1 UNION [ALL] upit_2…ORDER BY sort • povezuje rezultate više upita u jedinstveni skup rezultata • uklanja duplicirane redove rezultata obaju upita • ALL - za prikaz svih redova, bez eliminacije duplikata • mora vrijediti: - upit_1 i upit_2 imaju jednak broj izlaznih kolona - izlazne kolone za upit_1 i upit_2 moraju biti istog tipa T1 T2 SELECT *FROM T1 UNION SELECT* FROM T2
POGLED (VIEW) • KREIRANJE POGLEDA CREATE VIEW ime AS SELECT ...select query [WITH CHECK] CREATE VIEW V_UPISNI_LIST AS SELECT IME, PREZIME, MAT_BR, SEM, SK_GOD,OBR_PROG_IME FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID INNER JOIN OBR_PROG ON UPISNI_LIST.OBR_PROG_ID=OBR_PROG.OBR_PROG_ID SELECT * FROM V_UPISNI_LIST WHERE IME=‘X’ AND PREZIME=‘Y’
POGLED (VIEW) • PREIMENOVANJE ATRIBUTA POGLEDA 1. novi_naziv=atribut CREATE VIEW V_STUDENTI AS SELECT IME, PREZIME,UPISANI_SEMESTAR=SEM FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID 2. atribut AS novi_naziv CREATE VIEW V_STUDENTI AS SELECT IME, PREZIME, SEM AS UPISANI_SEMESTAR FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID 3. CREATE VIEW naziv_pogleda (naziv atributa) AS CREATE VIEW V_STUDENTI (IME,PREZIME,UPISANI_SEMESTAR) AS SELECT IME,PREZIME,SEM FROM STUDENT INNER JOIN UPISNI_LIST ON STUDENT.STUDENT_ID=UPISNI_LIST.STUDENT_ID
POGLED (VIEW) • AŽURIRANJE, UNOS I BRISANJE PODATAKA - za razliku od stvarnih tablica, pogled podliježe znatnim ograničenjima - mijenjanje, unos i brisanje podataka zabranjeno je za poglede: - formirane iz više od jedne tablice - formirane grupnim upitom (GROUP BY) - koji sadrže bar jedan atribut stvoren pomoću agregatne funkcije - formirane pomoću opcije DINSTICT - formirane kao UNION query - formirane pomoću složenog upita sa podupitom
POGLED (VIEW) • UKLANJANJE POGLEDA DROP VIEW naziv_pogleda DROP VIEW V1_STUDENT