Baze podataka Uvod u SQL Jezik relacione BP Predavanja
Upiti (Queries) Koriste se za izdvajanje zapisa iz jedne ili više tabela i to po određenom kriterijumu kojim rešavamo neki konkretan problem. Često se koriste kao izvori podataka za obrasce i izveštaje. Bazirani na SQL-u
SQL Structured Query Language Strukturni upitni jezik za RBP Razvio ga je IBM u okviru projekta System R Danas je SQL ugrađen u sve vodeće SUBP ANSI standard American National Standards Institute Razvoj SQL-a traje i danas Predavanja
SQL Svaki programski jezik obuhvata podatke i manipulacije nad tim podacima SQL-jezik: Objekti manipulacije su relacije Rezultati manipulacija su relacije Terminologija: relacija tabela n-torka red (vrsta) Vrednosti u n-torkama za jedan atribut kolona SQL se zasniva na relacionom računu n-torki Predavanja
SQL SQL sadrži naredbe za: definisanje relacija (shema) ažuriranje podataka (unos, izmena, brisanje) postavljanje upita sortiranje i formatiranje ispisa aritmetičke operacije nad podacima definisanje pogleda (view) kontrolu sigurnosti itd.... SQL podržava 3 osnovne funkcije BP: definicije, manipulacije i kontrolu Predavanja
SQL - sintaksa - select prezime from osoba where ime = ‘Marko’; SQL ne pravi razliku između velikih i malih slova (case insensitive). Sledeće dve naredbe su jednake: select prezime from osoba where ime = ‘Marko’; SELECT prezime FROM osoba WHERE ime = ‘Marko’; Komentari: -- ovo je komentar /* ovo je komentar koji se proteže u više redova */ Za nazive (imena) se ne smeju koristiti rezervisane reči Predavanja
SQL - sintaksa - SELECT * FROM student WHERE brind ≤ 100; Separator naredbi: naredba1; naredba2; FORMAT naredbi: Sledeće naredbe su ispravno napisane SELECT * FROM student WHERE brind ≤ 100; SELECT * FROM student WHERE brind ≤ 100; SELECT * FROM student WHERE BrInd ≤ 100; Predavanja
UPIT - SELECT - Koje podatke tražimo kao rezultat, Najznačajnija i najčešće korišćena SQL naredba za manipulaciju podacima Kod svakog upita zadajemo (u principu): Koje podatke tražimo kao rezultat, Iz kojih tabela to tražimo, Koji uslov treba da zadovolje podaci, da bi bili uključeni u rezultat U kom redosledu želimo prikaz podataka Predavanja
Prost upit nad jednom tabelom Podrazumeva se naredba upita SELECT, nad jednom tabelom Kao rezultat daje niz redova (ili jedan ili nijedan) koji zadovoljavaju eventualno zadati uslov SELECT lista – podrazumeva se specifikacija podataka u rezultatu upita Specifikacija – zadata jednim ili sa više izraza odvojenih zarezima (R-lista) Predavanja
Prost upit nad jednom tabelom Sintaksa SELECT * {[ALL DISTINCT] R-Lista} FROM ImeTabele [WHERE R-Predikat] [ORDER BY ImeKolone [DESC] {, ImeKolone [DESC]} …]; * - Specijalni slučaj R-liste, kada u rezultat želimo da uključimo sve kolone tabele ALL – iz rezultata ne uklanja istovetne redove, DISTINCT – suprotno. Podrazumeva se ALL. R-Lista se zadaje kao jedan ili više R-Izraza, pored naziva kolone javljaju se i konstante Predavanja
Prost upit nad jednom tabelom Klauzula FROM (“odakle”), specificira se ImeTabele. To je ime osnovne tabele. Ovo je obavezna klauzula. R_Predikat , uslov prikazivanja rezultata, to je logički izraz izračunljiv nad svakim pojedinim redom tabele. Rezultat upita se dobija samo za one vrednosti R_Predikata koje daju istinitosnu vrednost. Najčešće je to relacioni izraz (>,<,=,…) sa kolonama, a sa desne strane može se javiti i konstanta ORDER BY – daje željeni redosled prikaza rezultata. Podrazumeva se rastući redosled (ASC). U suprotnom se navodi DESC uz odgovarajuću kolonu. Uvek je poslednja klauzula u SELECT bloku. Predavanja
Prost upit nad jednom tabelom Najjednostavniji mogući SQL upit je u formi: SELECT * FROM ImeTabele; Ova naredba prikazuje sve redove tabele čije je ime navedeno iza FROM klauzule U svakom redu prikazuju se vrednosti svih kolona, onim redom kako je to zapisano u datoteci Kod upita se obično traži prikaz samo određenih kolona, ili prikaz svih kolona u redosledu koji je drugačije određen. Predavanja
Prost upit nad jednom tabelom Upit za prikaz cele tabele u željenom redosledu SELECT * FROM Student ORDER BY Ime; Student BrInd Ime Prezime 1 Marko Marković 2 Petar Petrović 3 Aleksa Perić BrInd Ime Prezime 3 Aleksa Perić 1 Marko Marković 2 Petar Petrović SELECT Predavanja
Prost upit nad jednom tabelom Upit za prikaz samo jedne kolone iz tabele i bez eliminacije duplikata SELECT Fakultet FROM Student; Student BrInd Ime Prezime Fakultet 1 Marko Marković PFB 2 Petar Petrović FIM 3 Aleksa Perić 4 Marić FTHM 5 Lazić 6 Jovan Fakultet PFB FIM FTHM SELECT Predavanja
Prost upit nad jednom tabelom Upit za prikaz samo jedne kolone iz tabele i sa eliminacijom duplikata : SELECT DISTINCT Fakultet FROM Student ; Student BrInd Ime Prezime Fakultet 1 Marko Marković PFB 2 Petar Petrović FIM 3 Aleksa Perić 4 Marić FTHM 5 Lazić 6 Jovan Fakultet PFB FIM FTHM SELECT Predavanja
Prost upit nad jednom tabelom Upit za prikaz samo jedne kolone iz tabele i sa eliminacijom duplikata , a u željenom redosledu: SELECT DISTINCT Fakultet FROM Student ORDER BY Fakultet ; Student BrInd Ime Prezime Fakultet 1 Marko Marković PFB 2 Petar Petrović FIM 3 Aleksa Perić 4 Marić FTHM 5 Lazić 6 Jovan Fakultet FIM FTHM PFB SELECT Predavanja
Prost upit nad jednom tabelom Upit za prikaz više kolona sa zadavanjem uslova: SELECT BrInd, Ime, Prezime FROM Student WHERE Fakultet=‘FIM’; Student BrInd Ime Prezime Fakultet 1 Marko Marković PFB 2 Petar Petrović FIM 3 Aleksa Perić 4 Marić FTHM 5 Lazić 6 Jovan BrInd Ime Prezime 2 Petar Petrović 3 Aleksa Perić SELECT 28.11.2006. Predavanja
Prost upit nad jednom tabelom Upit za prikaz dve kolone sa zadavanjem uslova, a u željenom redosledu: SELECT BrInd, Ime, Prezime FROM Student WHERE Fakultet=‘FIM’ ORDER BY Ime; Student BrInd Ime Prezime Fakultet 1 Marko Marković PFB 2 Petar Petrović FIM 3 Aleksa Perić 4 Marić FTHM 5 Lazić 6 Jovan BrInd Ime Prezime 3 Aleksa Perić 2 Petar Petrović SELECT 28.11.2006. Predavanja
Prost upit nad jednom tabelom sa izvedenim rezultatom Upit za prikaz ukupnog broja studenata (odgovara broju redova u tabeli Student) SELECT COUNT(*) FROM Student ; Student BrInd Ime Prezime Fakultet 1 Marko Marković PFB 2 Petar Petrović FIM 3 Aleksa Perić 4 Marić FTHM 5 Lazić 6 Jovan SELECT 6 Predavanja
Prost upit nad jednom tabelom sa izvedenim rezultatom Upit za prikaz broja fakulteta na koje su upisani studenati (odgovara broju različitih vrednosti kolone Fakultet u tabeli Student) SELECT COUNT(DISTINCT Fakultet) FROM Student ; Student BrInd Ime Prezime Fakultet 1 Marko Marković PFB 2 Petar Petrović FIM 3 Aleksa Perić 4 Marić FTHM 5 Lazić 6 Jovan SELECT 3 Predavanja
Prost upit nad jednom tabelom sa izvedenim rezultatom Upit za prikaz broja studenata koji su upisali FTHM SELECT COUNT(*) FROM Student WHERE Fakultet=‘FTHM’; Student BrInd Ime Prezime Fakultet 1 Marko Marković PFB 2 Petar Petrović FIM 3 Aleksa Perić 4 Marić FTHM 5 Lazić 6 Jovan SELECT 1 Predavanja
Prost upit nad jednom tabelom sa izvedenim rezultatom Upit za prikaz sume cena svih proizvoda: SELECT SUM(Cena) FROM Racun; Racun SifP NazivP Kolicina Cena 005 P1 1 1800,00 010 P2 6 300,00 020 P3 5 250,00 001 2 1100,00 003 4 600,00 011 3 700,00 SELECT 1800+300+250+1100 .... Predavanja
Prost upit nad jednom tabelom sa izvedenim rezultatom Upit za prikaz minimalne i maksimalne cene iz računa: SELECT MIN(Cena), MAX(Cena) FROM Racun; Racun SifP NazivP Kolicina Cena 005 P1 1 1800,00 010 P2 6 300,00 020 P3 5 250,00 001 2 1100,00 003 4 600,00 011 3 700,00 SELECT 1800 250 Predavanja
Prost upit nad jednom tabelom sa izvedenim rezultatom Upit za prikaz sume i proseka cena za proizvod P1: SELECT SUM(Cena), AVG(Cena) FROM Racun WHERE NazivP= ‘P1’; Primedba: rezultat AVG funkcije preuzima tip podataka od argumenta (tip kolone) Racun SifP NazivP Kolicina Cena 005 P1 1 1800,00 010 P2 6 300,00 020 P3 5 250,00 001 2 1100,00 003 4 600,00 011 3 700,00 SELECT 2500 1250 Predavanja
Klauzula GROUP BY (grupisanje slogova na osnovu nekog kriterijuma) Prikazi najmanju,najvecu,srednju platu i broj zaposlenih po odeljenjima: SELECT MIN(plata) AS najmanja, MAX(plata) AS najveca, ROUND(AVG(plata),2) AS srednja, COUNT(*) AS broj, brod$ FROM RADNIK GROUP BY brod$;
Klauzula HAVING (uslovi u okviru grupa) Prikaži koje poslove obavlja više od 1 radnika unutar svakog odeljenja: SELECT brod$, posao, count(*) AS broj zaposlenih FROM radnik GROUP BY brod$, posao HAVING count(*)>1;
Upiti nad više tabela ImeTabele.ImeKolone Za kolone koje se nalaze u više tabele obavezno je navođenje ImeTabele.ImeKolone Predavanja
Upiti nad više tabela Primeri: Upit koji daje nazive naslova i nazive njihovih oblasti (spajaju se tabele Naslov i Oblast po uslovu jednakosti kolona SifO) SELECT N.Naziv, O.Naziv FROM Naslov N, Oblast O WHERE N.SifO=O.SifO ORDER BY N.Naziv ; Predavanja
Klauzule WHERE i HAVING Predikati – to su relacioni izrazi, koji se mogu kombinovati Predikati: prosti i složeni Prost predikat: elementarni logički izraz izračunljiv nad svakim redom neke tabele Složen predikat: formira se od prostih, primenom logičkih operatora AND, OR i NOT Forme prostih predikata: Izraz1 {<|<=|=|<>|>=|>} Izraz2 ispituje da li su vrednosti navedenih izraza u zadatom odnosu Predavanja
Klauzule WHERE i HAVING Izraz [NOT] BETWEEN Izraz1 AND Izraz2 ispituje da li je (ili nije) vrednost izraza u zadatim granicama. Kolona IS [NOT] NULL ispituje da li je (ili nije) vrednost kolone NULL Dva specijalna znaka (džokeri): ‘?’ bilo koji znak, ‘*’ bilo koji broj znakova Predavanja
Klauzule WHERE i HAVING Upit koji daje nazive svih naslova u kojima se nalazi reč “jezik” SELECT Naziv FROM Naslov WHERE Naziv LIKE ‘*jezik*’; Predavanja
Klauzule WHERE i HAVING Upit koji daje šifre knjiga koje odgovaraju naslovima šifara “RBP0” i “RK00” SELECT SifK FROM Knjiga WHERE SifN IN (‘RBP0’,’RK00’); Upit koji daje šifre naslova za sve knjige osim za one sa šiframa ‘001’, ‘002’, ‘003’ SELECT DISTINCT SifN FROM Knjiga WHERE SifK <> ALL (‘001’,’002’, ‘003’); Predavanja
Upiti sa podupitima (ugnježdeni upiti) Definicija podupita: SELECT naredba koja se nalazi u sklopu WHERE i HAVING klauzula Predavanja
Upiti sa podupitima (ugnježdeni upiti) Izlistati spisak imena zaposlenih koji rade na Dorcolu. SELECT RADNIK.ime, RADNIK.[brod$] FROM RADNIK WHERE RADNIK.brod$=(SELECT odeljenje.brod# FROM ODELJENJE WHERE mesto='Dorcol'); Predavanja
SQL naredbe ažuriranja Deo SQL jezika kojim se vrši izmena u tabelama čine tri naredbe: INSERT: naredba za unošenje novih redova u tabelu UPDATE: naredba za izmene redova u tabeli DELETE: naredba za uklanjanje redova iz tabele Naredbe ažuriranja se uvek odnose na jednu tabelu Predavanja 35
INSERT u koju tabelu ubacujemo, za koje kolone dajemo vrednosti, Uz ovu naredbu mora se navesti: u koju tabelu ubacujemo, za koje kolone dajemo vrednosti, vrednosti koje ubacujemo. Sintaksa naredbe: INSERT INTO ImeTabele (ListaKolona) VALUES (ListaKonstanti); Ako nije navedena ListaKolona iza ImeTabele ubacuju se vrednosti za sve kolone Predavanja 36
UPDATE u kojoj tabeli se vrše izmene, Uz ovu naredbu mora se navesti: u kojoj tabeli se vrše izmene, za koje kolone u redu menjamo vrednosti, pod kojim uslovima menjamo vrednosti. Sintaksa naredbe UPDATE koja sadrži sve navedene elemente: UPDATE ImeTabele SET atribut1=vrednost1, atribut2=vrednost2, WHERE lista uslova; Predavanja 37
DELETE iz koje tabele se vrši uklanjanje, Uz ovu naredbu mora se navesti: iz koje tabele se vrši uklanjanje, pod kojim uslovima se uklanja neki red. Sintaksa naredbe: DELETE FROM ImeTabele WHERE lista uslova Predavanja 38