Baze podataka Uvod u SQL Jezik relacione BP
Baze podataka Uvod u SQL Jezik relacione BP Predavanja 1
Upiti (Queries) l l 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 l l l 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 3
SQL l l Svaki programski jezik obuhvata podatke i manipulacije nad tim podacima SQL-jezik: l Objekti manipulacije su relacije l Rezultati manipulacija su relacije Terminologija: l relacija tabela l n-torka red (vrsta) l Vrednosti u n-torkama za jedan atribut kolona SQL se zasniva na relacionom računu n-torki Predavanja 4
SQL l l SQL sadrži naredbe za: l definisanje relacija (shema) l ažuriranje podataka (unos, izmena, brisanje) l postavljanje upita l sortiranje i formatiranje ispisa l aritmetičke operacije nad podacima l definisanje pogleda (view) l kontrolu sigurnosti l itd. . SQL podržava 3 osnovne funkcije BP: definicije, manipulacije i kontrolu Predavanja 5
SQL - sintaksa l l l SQL ne pravi razliku između velikih i malih slova (case insensitive). Sledeće dve naredbe su jednake: l select prezime from osoba where ime = ‘Marko’; l SELECT prezime FROM osoba WHERE ime = ‘Marko’; Komentari: l -- ovo je komentar l /* ovo je komentar koji se proteže u više redova */ Za nazive (imena) se ne smeju koristiti rezervisane reči Predavanja 6
SQL - sintaksa l l Separator naredbi: naredba 1; naredba 2; FORMAT naredbi: Sledeće naredbe su ispravno napisane l SELECT * FROM student WHERE brind ≤ 100; l l SELECT * FROM student WHERE brind ≤ 100; SELECT * FROM student WHERE Br. Ind ≤ 100; Predavanja 7
UPIT - SELECT l l Najznačajnija i najčešće korišćena SQL naredba za manipulaciju podacima Kod svakog upita zadajemo (u principu): l Koje podatke tražimo kao rezultat, l l l 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 8
Prost upit nad jednom tabelom l l 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 9
Prost upit nad jednom tabelom l l l Sintaksa SELECT * {[ALL DISTINCT] R-Lista} FROM Ime. Tabele [WHERE R-Predikat] [ORDER BY Ime. Kolone [DESC] {, Ime. Kolone [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 10
Prost upit nad jednom tabelom l l l Klauzula FROM (“odakle”), specificira se Ime. Tabele. To je ime osnovne tabele. Ovo je obavezna klauzula. R_Predikat , uslov prikazivanja rezultata, l to je logički izraz izračunljiv nad svakim pojedinim redom tabele. l Rezultat upita se dobija samo za one vrednosti R_Predikata koje daju istinitosnu vrednost. l 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 11
Prost upit nad jednom tabelom l Najjednostavniji mogući SQL upit je u formi: SELECT * FROM Ime. Tabele; l Ova naredba prikazuje sve redove tabele čije je ime navedeno iza FROM klauzule l U svakom redu prikazuju se vrednosti svih kolona, onim redom kako je to zapisano u datoteci l 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 12
Prost upit nad jednom tabelom l Upit za prikaz cele tabele u željenom redosledu SELECT * FROM Student ORDER BY Ime; Student Br. Ind Ime Prezime 1 Marković 3 Aleksa Perić 2 Petar Petrović SELECT Predavanja 13
Prost upit nad jednom tabelom Upit za prikaz samo jedne kolone iz tabele i bez eliminacije duplikata SELECT Fakultet FROM Student; l Student Br. Ind Ime Prezime Fakultet 1 Marković PFB 2 Petar Petrović FIM 3 Aleksa Perić FIM 4 Marko Marić FTHM 5 Petar Lazić PFB 6 Jovan Marić PFB SELECT Predavanja FIM PFB 14
Prost upit nad jednom tabelom l Upit za prikaz samo jedne kolone iz tabele i sa eliminacijom duplikata : SELECT DISTINCT Fakultet FROM Student ; Student Br. Ind Ime Prezime Fakultet 1 Marković PFB 2 Petar Petrović FIM 3 Aleksa Perić FIM 4 Marko Marić FTHM 5 Petar Lazić PFB 6 Jovan Marić PFB Fakultet SELECT PFB FIM FTHM Predavanja 15
Prost upit nad jednom tabelom l 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 Br. Ind Ime Prezime Fakultet 1 Marković PFB 2 Petar Petrović FIM 3 Aleksa Perić FIM 4 Marko Marić FTHM 5 Petar Lazić PFB 6 Jovan Marić PFB Fakultet SELECT FIM FTHM PFB Predavanja 16
Prost upit nad jednom tabelom l Upit za prikaz više kolona sa zadavanjem uslova: SELECT Br. Ind, Ime, Prezime FROM Student WHERE Fakultet=‘FIM’; Student Br. Ind Ime Prezime Fakultet 1 Marković PFB 2 Petar Petrović FIM 3 Aleksa Perić FIM 4 Marko Marić FTHM 5 Petar Lazić PFB 6 Jovan Marić PFB 28. 11. 2006. SELECT Predavanja Br. Ind Ime Prezime 2 Petar Petrović 3 Aleksa Perić 17
Prost upit nad jednom tabelom l Upit za prikaz dve kolone sa zadavanjem uslova, a u željenom redosledu: SELECT Br. Ind, Ime, Prezime FROM Student WHERE Fakultet=‘FIM’ ORDER BY Ime; Student Br. Ind Ime Prezime Fakultet 1 Marković PFB 2 Petar Petrović FIM 3 Aleksa Perić FIM 4 Marko Marić FTHM 5 Petar Lazić PFB 6 Jovan Marić PFB 28. 11. 2006. SELECT Predavanja Br. Ind Ime Prezime 3 Aleksa Perić 2 Petar Petrović 18
Prost upit nad jednom tabelom sa izvedenim rezultatom Upit za prikaz ukupnog broja studenata (odgovara broju redova u tabeli Student) SELECT COUNT(*) FROM Student ; l Student Br. Ind Ime Prezime Fakultet 1 Marković PFB 2 Petar Petrović FIM 3 Aleksa Perić FIM 4 Marko Marić FTHM 5 Petar Lazić PFB 6 Jovan Marić PFB SELECT Predavanja 6 19
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 ; l Student Br. Ind Ime Prezime Fakultet 1 Marković PFB 2 Petar Petrović FIM 3 Aleksa Perić FIM 4 Marko Marić FTHM 5 Petar Lazić PFB 6 Jovan Marić PFB SELECT Predavanja 3 20
Prost upit nad jednom tabelom sa izvedenim rezultatom Upit za prikaz broja studenata koji su upisali FTHM SELECT COUNT(*) FROM Student WHERE Fakultet=‘FTHM’; l Student Br. Ind Ime Prezime Fakultet 1 Marković PFB 2 Petar Petrović FIM 3 Aleksa Perić FIM 4 Marko Marić FTHM 5 Petar Lazić PFB 6 Jovan Marić PFB SELECT Predavanja 1 21
Prost upit nad jednom tabelom sa izvedenim rezultatom l Upit za prikaz sume cena svih proizvoda: SELECT SUM(Cena) FROM Racun; Racun Sif. P Naziv. P Kolicina Cena 005 P 1 1 1800, 00 010 P 2 6 300, 00 020 P 3 5 250, 00 001 P 3 2 1100, 00 003 P 3 4 600, 00 011 P 1 3 700, 00 SELECT Predavanja 1800+300+250+1100. . 22
Prost upit nad jednom tabelom sa izvedenim rezultatom l Upit za prikaz minimalne i maksimalne cene iz računa: SELECT MIN(Cena), MAX(Cena) FROM Racun; Racun Sif. P Naziv. P Kolicina Cena 005 P 1 1 1800, 00 010 P 2 6 300, 00 020 P 3 5 250, 00 001 P 3 2 1100, 00 003 P 3 4 600, 00 011 P 1 3 700, 00 SELECT Predavanja 1800 250 23
Prost upit nad jednom tabelom sa izvedenim rezultatom l Racun Upit za prikaz sume i proseka cena za proizvod P 1: SELECT SUM(Cena), AVG(Cena) FROM Racun WHERE Naziv. P= ‘P 1’; l Primedba: rezultat AVG funkcije preuzima tip podataka od argumenta (tip kolone) Sif. P Naziv. P Kolicina Cena 005 P 1 1 1800, 00 010 P 2 6 300, 00 020 P 3 5 250, 00 001 P 3 2 1100, 00 003 P 3 4 600, 00 011 P 1 3 700, 00 SELECT Predavanja 2500 1250 24
Klauzula GROUP BY (grupisanje slogova na osnovu nekog kriterijuma) l 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) l 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 l Za kolone koje se nalaze u više tabele obavezno je navođenje l Ime. Tabele. Ime. Kolone Predavanja 27
Upiti nad više tabela l Primeri: Upit koji daje nazive naslova i nazive njihovih oblasti (spajaju se tabele Naslov i Oblast po uslovu jednakosti kolona Sif. O) SELECT N. Naziv, O. Naziv FROM Naslov N, Oblast O WHERE N. Sif. O=O. Sif. O ORDER BY N. Naziv ; Predavanja 28
Klauzule WHERE i HAVING l l l 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: Izraz 1 {<|<=|=|<>|>=|>} Izraz 2 ispituje da li su vrednosti navedenih izraza u zadatom odnosu Predavanja 29
Klauzule WHERE i HAVING l l l Izraz [NOT] BETWEEN Izraz 1 AND Izraz 2 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 30
Klauzule WHERE i HAVING l Upit koji daje nazive svih naslova u kojima se nalazi reč “jezik” SELECT Naziv FROM Naslov WHERE Naziv LIKE ‘*jezik*’; Predavanja 31
Klauzule WHERE i HAVING l l Upit koji daje šifre knjiga koje odgovaraju naslovima šifara “RBP 0” i “RK 00” SELECT Sif. K FROM Knjiga WHERE Sif. N IN (‘RBP 0’, ’RK 00’); Upit koji daje šifre naslova za sve knjige osim za one sa šiframa ‘ 001’, ‘ 002’, ‘ 003’ SELECT DISTINCT Sif. N FROM Knjiga WHERE Sif. K <> ALL (‘ 001’, ’ 002’, ‘ 003’); Predavanja 32
Upiti sa podupitima (ugnježdeni upiti) l Definicija podupita: l SELECT naredba koja se nalazi u sklopu WHERE i HAVING klauzula Predavanja 33
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 34
SQL naredbe ažuriranja l l Deo SQL jezika kojim se vrši izmena u tabelama čine tri naredbe: l INSERT: naredba za unošenje novih redova u tabelu l UPDATE: naredba za izmene redova u tabeli l DELETE: naredba za uklanjanje redova iz tabele Naredbe ažuriranja se uvek odnose na jednu tabelu Predavanja 35
INSERT l Uz ovu naredbu mora se navesti: l u koju tabelu ubacujemo, za koje kolone dajemo vrednosti, l vrednosti koje ubacujemo. Sintaksa naredbe: INSERT INTO Ime. Tabele (Lista. Kolona) VALUES (Lista. Konstanti); Ako nije navedena Lista. Kolona iza Ime. Tabele ubacuju se vrednosti za sve kolone l l l Predavanja 36
UPDATE l Uz ovu naredbu mora se navesti: l u kojoj tabeli se vrše izmene, za koje kolone u redu menjamo vrednosti, l pod kojim uslovima menjamo vrednosti. Sintaksa naredbe UPDATE koja sadrži sve navedene elemente: UPDATE Ime. Tabele SET atribut 1=vrednost 1, atribut 2=vrednost 2, WHERE lista uslova; l l Predavanja 37
DELETE l l Uz ovu naredbu mora se navesti: l iz koje tabele se vrši uklanjanje, l pod kojim uslovima se uklanja neki red. Sintaksa naredbe: DELETE FROM Ime. Tabele WHERE lista uslova Predavanja 38
- Slides: 39