89
28.11.2006. Predavanja 1 Uvod u SQL Jezik relacione BP Lekcija 9 Lekcija 9 Baze podataka Baze podataka

BP Lekcija 09_SQL Kreiranja i Upiti

Embed Size (px)

DESCRIPTION

upiti sql

Citation preview

  • 28.11.2006.Predavanja*Uvod u SQLJezik relacione BPLekcija 9Baze podataka

    Predavanja

  • 28.11.2006.Predavanja*Strukturni upitni jezik za RBP, modifikovana rel. algebraRazvio ga je IBM u okviru projekta System RDanas je SQL ugraen u sve vodee SUBPANSI standard American National Standards Institute Standardizacija:Zatita programa od zastarevanjaVertikalna kompatibilnostPrenosivost programa na druge raunareStandardizacija za relacione BPPrvi standard 1986, dopunjen 1989Znaajnije dopune 1992. (ANSI SQL), 1995., 1999.Razvoj SQL-a traje i danasSQLStructured Query Language

    Predavanja

  • 28.11.2006.Predavanja*SQL Svaki programski jezik obuhvata podatke i manipulacije nad tim podacimaSQL-jezik: Objekti manipulacije su relacijeRezultati manipulacija su relacijeTerminologija: relacija tabelan-torka red (vrsta)Vrednosti u n-torkama za jedan atribut kolonaSQL se zasniva na relacionom raunu n-torki

    Predavanja

  • 28.11.2006.Predavanja*SQL sadri naredbe za:definisanje relacija (shema)auriranje podataka (unos, izmena, brisanje)postavljanje upitasortiranje i formatiranje ispisaaritmetike operacije nad podacimadefinisanje pogleda (view)kontrolu sigurnostiitd....SQL podrava 3 osnovne funkcije BP: definicije, manipulacije i kontroluSQL

    Predavanja

  • 28.11.2006.Predavanja*Definicija BP: struktura, koje tabele, koji atributi, koji tipovi, koja ogranienja, pomoni indeksi za direktan pristup (DDL Data Definition Language)CREATE TABLE kreiranje tabele u BP DROP TABLE uklanjanje tabele iz BP ALTER TABLE izmena definicije tabele CREATE INDEX kreiranje indeksa DROP INDEX uklanjanje indeksa CREATE VIEW kreiranje pogleda DROP VIEW uklanjanje pogledaSQL- definicije -

    Predavanja

  • 28.11.2006.Predavanja*Manipulacija BP: upit nad bazom podataka (izvetavanje), auriranje (unos, izmena, brisanje)(DML Data manipulation Language)SELECT prikaz eljenog sadraja RBP UPDATE izmena vrednosti kolona tabele DELETE izbacivanje redova tabele INSERT dodavanje redova u tabeluSQL- manipulacije -

    Predavanja

  • 28.11.2006.Predavanja*Kontrola pristupa podacima: koji korisnici imaju pristup, kojim podacima, ta mogu da rade sa tim podacima(DCL Data Control Language)GRANT (dodeljivanje ovlaenja nad objektima baze drugim korisnicima od strane vlasnika)REVOKE (ukidanje ovalaenja dodeljenih pomou GRANT)SQL- kontrola -

    Predavanja

  • 28.11.2006.Predavanja*SQL neodgovarajui naziv - nije samo upitni jezikSQL podrava oba reima rada sa BP:Interaktivni: korisnik zadaje jednu po jednu SQL naredbu, preko tastature, ishod se prikazuje na monitoru, pristup BP je ogranien jedino pravima korisnikaProgramski: korisnik pokree program u kome su ugraene SQL naredbe, pristup BP je ogranien pravima korisnika i sadrajem programaSQL blokovi ugraeni u klasini vii programski jezikSQL

    Predavanja

  • 28.11.2006.Predavanja*Logike operacije: AND, OR i NOTOperacije poreenja: =, , , , IN, ANY, ALL, BETWEEN, IS NULL, LIKE, Skupovne operacije:UNION, INTERSECT, EXCEPTFunkcije nad skupovima podataka:COUNT, SUM, MIN, MAX, AVGIzrazi se mogu grupisati pomou zagradaSQL

    Predavanja

  • 28.11.2006.Predavanja*SQLtipovi podataka INTEGER: (INT), ceo broj sa ili bez predznaka iji broj cifara zavisi od konkretne implement.SMALLINT: ceo broj sa brojem cifara manjim u odnosu na INTEGERREAL: realni broj sa ili bez predznaka, preciznost zavisi od konkreten implement.DOUBLE PRECISION: (DOUBLE), proirena preciznost u odnosu na REALDECIMAL(m,n): (DEC(m,n)), decimalni broj sa ili bez predznaka, m-cifara, a n-decimalnih

    Predavanja

  • 28.11.2006.Predavanja*CHARACTER(n): (CHAR(n)), niz znakova fiksne duine n Konstanta tipa CHAR se pie izmeu jednostrukih navodnikaVARCHAR(n) - niz znakova duine najvie nTEXT tekst proizvoljne duinePraktino sve implementacije SQL-a podravaju dodatne tipove podataka kao to su:BOOLEAN TRUE/FALSE (tano/netano)DATE datum (2004-12-01)TIME vreme (16:50:07)SQLtipovi podataka

    Predavanja

  • 28.11.2006.Predavanja*SQL ne pravi razliku izmeu velikih i malih slova (case insensitive). Sledee 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 protee u vie redova */Za nazive (imena) se ne smeju koristiti rezervisane reiSQL- sintaksa -

    Predavanja

  • 28.11.2006.Predavanja*Separator naredbi: naredba1; naredba2;FORMAT naredbi: Sledee naredbe su ispravno napisaneSELECT * FROM student WHERE BrInd 100;SELECT * FROM student WHERE BrInd 100;SELECT * FROMstudent WHERE BrInd 100;SQL- sintaksa -

    Predavanja

  • 28.11.2006.Predavanja*Kreiranje tabela Prilikom kreiranja tabele (definicija njene strukture i osobina) neophodno je navesti:Ime tabele, mora biti unikatno u BPIme svake kolone, mora biti unikatno unutar tabeleTip svake koloneJedno ili vie ogranienja za kolone, koje ih imajuJedno ili vie ogranienja za svaku tabelu, ako postoje

    Predavanja

  • 28.11.2006.Predavanja*Sintaksa naredbe kreiranja tabele: CREATE TABLE ImeTabele ( ImeKolone TipKolone OgranienjeKolone ... {, ImeKolone TipKolone OgranienjeKolone ...} [OgranienjeTabele {, OgranienjeTabele}]);ImeTabele i ImeKolone pravila koja vae za veinu varijabli: prvi znak je slovo, ostali znaci su slova, cifre, posebni znaci itd.)TipKolone SQL tip podatakaUz svaku kolonu mogu se navesti jedno ili vie ogranienja za tu kolonuKreiranje tabela

    Predavanja

  • 28.11.2006.Predavanja*Osnovne klauzule OgranienjeKolone:NOT NULL u koloni nije dozvoljena NULLUNIQUE u koloni nije dozvoljeno ponavljanje iste vrednostiPRIMARY KEY kolona je primarni klju, nije dozvoljena NULL vrednost niti ponavljanje vrednostiCHECK (Predikat) svaka vrednost u koloni mora da zadovolji uslov zadat logikim izrazom Predikat. U izrazu se ne mogu navoditi druge koloneKreiranje tabela

    Predavanja

  • 28.11.2006.Predavanja*DEFAULT=Konstanta ako se prilikom unoenja jednog reda podataka u tabelu za kolonu ne zada vrednost, podrazumeva se KonstantaREFERENCES ImeTabele - specifikacija referencijalnog integriteta za jednu kolonukolona je strani klju u odnosu na tabelu ImeTabele, mora imati ili vrednost primarnog kljua u toj tabeli ili NULL (ako nema NOT NULL ogranienja)Kreiranje tabela

    Predavanja

  • 28.11.2006.Predavanja*Za celu tabelu se mogu zadati: ni jedno, jedno ili vie ogranienja.Ogranienja mogu da vae za jednu ili vie kolonaUNIQUE(ListaKolona) nije dozvoljeno ponavljanje istih vrednosti kombinacijaPRIMARY KEY(ListaKolona) navedene kolone su primarni klju,...Konstrukcija ListaKolona oznaava: ImeKolone {, ImeKolone}Kreiranje tabela

    Predavanja

  • 28.11.2006.Predavanja*Klauzule za dinamiku specifikaciju referencijalnog integriteta, ta se deava u sluaju pokuaja brisanja reda u ciljnoj tabeli ImeTabele, ta se deava u sluaju pokuaja izmene vrednosti primarnog kljua u ciljnoj tabeli ImeTabeleDELETE OF ImeTabele {RESTRICTED CASCADES NULLS}UPDATE OF ImeTabele {RESTRICTED CASCADES NULLS}Kreiranje tabela

    Predavanja

  • 28.11.2006.Predavanja*Sva ogranienja navedena u CREATE TABLE su aktivna u svakom trenutku postojanja tabeleSUBP e odbiti svaki pokuaj sa tabelom, koji je u suprotnosti sa ogranienjimaOlakica za projektante i programere BPProvere se ne moraju ugraivati u aplikativne programeDeklarativna mo naredbe CREATE TABLE je od velikog znaaja, naroito kod dinamike specifikacije referencijalnog integritetaKreiranje tabela

    Predavanja

  • 28.11.2006.Predavanja*Primer: Kompletna definicija BP BibliotekaCREATE TABLE Oblast ( SifOCHAR(2)PRIMARY KEY, NazivCHAR(20)NOT NULL UNIQUE );CREATE TABLE Naslov ( SifNCHAR(4)PRIMARY KEY, NazivCHAR(20)NOT NULL SifOCHAR(2)NOT NULL REFERENCES Oblast UPDATE OF Oblast CASCADES, DELETE OF Oblast RESTRICTED );Kreiranje tabela

    Predavanja

  • 28.11.2006.Predavanja*CREATE TABLE Autor ( SifACHAR(3)PRIMARY KEY, ImeCHAR(15)NOT NULL );CREATE TABLE Clan ( SifCCHAR(3)PRIMARY KEY, ImeCHAR(15)NOT NULL );CREATE TABLE Knjiga ( SifKCHAR(3)PRIMARY KEY, SifNCHAR(4)NOT NULL REFERENCES Naslov UPDATE OF Naslov CASCADES, DELETE OF Naslov RESTRICTED );Kreiranje tabela

    Predavanja

  • 28.11.2006.Predavanja*CREATE TABLE Autor ( SifACHAR(3)PRIMARY KEY, ImeCHAR(15)NOT NULL );CREATE TABLE Clan ( SifCCHAR(3)PRIMARY KEY, ImeCHAR(15)NOT NULL );CREATE TABLE Knjiga ( SifKCHAR(3)PRIMARY KEY, SifNCHAR(4)NOT NULL REFERENCES Naslov UPDATE OF Naslov CASCADES, DELETE OF Naslov RESTRICTED );Kreiranje tabela

    Predavanja

  • 28.11.2006.Predavanja*CREATE TABLE Je_Autor ( SifACHAR(3)REFERENCES Autor, SifNCHAR(4)REFERENCES Naslov, KojiINTNOT NULL CHECK(Koji>0) PRIMARY KEY (SifA,SifN), UPDATE OF Autor CASCADES, DELETE OF Autor RESTRICTED, UPDATE OF Naslov CASCADES, DELETE OF Naslov RESTRICTED );Kreiranje tabela

    Predavanja

  • 28.11.2006.Predavanja*CREATE TABLE Drzi ( SifKCHAR(3)PRIMARY KEY REFERENCES Knjiga, SifCCHAR(3)NOT NULL REFERENCES Clan, DatumDATENOT NULL UPDATE OF Knjiga CASCADES, DELETE OF Knjiga RESTRICTED, UPDATE OF Clan CASCADES, DELETE OF Clan RESTRICTED );Kreiranje tabela

    Predavanja

  • 28.11.2006.Predavanja*PrimerStudentProfesorPredmetIspitBrIndImePrezimeAdresaTelefonEmailImePrezimeNaucnoZvanjeIdProfIdPredmetaNazivPredmetaOcenaSalaDatumVreme

    Predavanja

  • 28.11.2006.Predavanja*Primer:Studenti(BrInd, Ime, Prezime, Adresa, Telefon, Email)Profesori(IdProf, Ime Prezime, NaucnoZvanje)Predmeti(IdPredmet, NazivPredmeta)Ispit(Brind, IdPredmet, IdProf, Ocena, Sala, Datum, Vreme)Primer

    Predavanja

  • 28.11.2006.Predavanja*Kreiranje tabele StudentiCREATE TABLE Studenti ( BrIndINTPRIMARY KEY CHECK(0
  • 28.11.2006.Predavanja*CREATE TABLE Ispit ( BrIndINTREFERENCES Studenti, IdPredmetINTREFERENCES Predmeti, IdProfINTREFERENCES Profesori, OcenaINTNOT NULL CHECK (5Ocena10), SalaCHAR(5) UNIQUE, DatumDATE, VremeTIME PRIMARY KEY (BrInd,IdPredmeta,IdProf) UPDATE OF Studenti CASCADES, DELETE OF Studenti RESTRICTED, UPDATE OF Predmeti CASCADES, DELETE OF Predmeti RESTRICTED, UPDATE OF Profesori CASCADES, DELETE OF Profesori RESTRICTED);Primer

    Predavanja

  • 28.11.2006.Predavanja*Izbor dinamike specifikacije referencijalnih integriteta, kod uklanjanja predstavlja delikatnu operacijuAko se nepromiljeno koristi RESTRICTED, namee se krut reim, npr. ne mogu se ukloniti pogreno uneti podaci iz tabeleNaredba uklanjanja tabele iz BP DROP TABLE ImeTabele ;Tabela koja se uklanja mora biti prazna. U suprotnom SUBP nee izvriti tu naredbuUklanjanje tabela

    Predavanja

  • 28.11.2006.Predavanja*Kreiranje indeksa Indeks pomona datoteka za ubrzanje pristupa podacima u osnovnoj datoteciU osnovnoj datoteci zapisi se nalaze u nekom fizikom redosledu (redosled unoenja)Indeks moe se preureivati u rastuoj ili opadajuoj vrednosti indeksnog nizaSintaksa naredbe kreiranja indeksa: CREATE [UNIQUE] INDEX ImeIndeksa ON ImeTabele (ListaKolona)

    Predavanja

  • 28.11.2006.Predavanja*UNIQUE opcija da indeks mora biti unikatan. U tabeli na koju se indeks odnosi ne sme se vie puta ponoviti vrednost ListaKolonaImeIndeksa unikatni naziv indeksa u BPIme tabele tabela na koju se indeks odnosiListaKolona navoenje jedne ili vie kolona, po kojima se formira INDEKSNad istom tabelom se moe definisati vie indeksa (za razliite pristupe podacima)Indeks se moe kreirati odmah (dok je tabela prazna) ili naknadnoKreiranje indeksa

    Predavanja

  • 28.11.2006.Predavanja*Klauzula UNIQUE u definiciji indeksa ima efekat na klauzulu UNIQUE kod tabele:SUBP odbija svaku izmenu podataka u tabeli koja naruava unikatnost indeksaSUBP odbija kreiranje unikatnog indeksa za tabelu iji zateeni sadraj naruava tu unikatnostIndeks se moe bilo kada i bez obzira na sadraj svoje tabele ukloniti naredbom: DROP INDEX ImeIndeksaKreiranje i uklanjanje indeksa

    Predavanja

  • 28.11.2006.Predavanja*Primer: Ako se eli brz pristup podacima u tabeli Je_Autor po dva osnova, po ifri autora i po ifri naslova, kreiraju se dva indeksa:CREATE INDEX Je_Autor1 ON Je_Autor(SifA);CREATE INDEX Je_Autor2 ON Je_Autor(SifN);Indeksi

    Predavanja

  • 28.11.2006.Predavanja*Napomene:Svaka indeksna datoteka ima dva dela:ListaKolona, po kojima se vri pretraivanje i po kojima se vri ureivanje indeksaIndeks, koji slui za vezu sa osnovnom datot.Primer: Kreiranje indeksa nad jednim atributom koji nije primarni. Zadata je tabela gradjanin (matbr#,prezime,ime,datrodj,adresa)Redni broj zapisa (record number) vodi se u veini programskih paketaNeka je INDGRAD indeksna datotekaIndeksi

    Predavanja

  • 28.11.2006.Predavanja*gradjaninindgradIndeksi

    Redbrmatbr#prezimedatrodjadresa113248AntiZoran243286JoviMilan356732MariGoran456879BabiDragan542116RodiPetar689764LaziAna713589PeriVera

    indprez1Anti4Babi2Jovi6Lazi3Mari7Peri5Rodi

    Predavanja

  • 28.11.2006.Predavanja*Nisu svi atributi dobri kandidati za indeks. Npr. bit-map, text ili slikaPo pravilu su strani kljuevi kandidati za indeksIndeksiranje ima i svojih nedostataka: Prilikom auriranja osnovne tabele (brisanje, unoenje), mora se vriti reindeksiranje, pa se gubi na vremenu.Tabele sa malim brojem podataka u zapisu se ne indeksiraju, jer se pretraga moe efikasno izvriti brzim raunarima.Indeksi

    Predavanja

  • 28.11.2006.Predavanja*Izmena postojee tabele Naredba ALTERSintaksa: ALTER TABLE ImeTabele ADD (ImeKolone Tip, [ImeKolone Tip]...);Primer: U tabelu Odeljenje dodati kolone Sef_Od i Br_Zap ALTER TABLE Odeljenje ADD (ef_Od INTEGER, Br_Zap NUMBER(2));Primer: U istoj tabeli poveati duinu za Br_Zap ALTER TABLE Odeljenje MODIFY (Br_Zap NUMBER(6));

    Predavanja

  • 28.11.2006.Predavanja*Kreiranje i uklanjanje pogleda Osnovne tabele fiziki postoje na diskuPogled virtuelna (izvedena) tabelaNastaje kao rezultat upitaSintaksa naredbe kreiranja pogleda: CREATE VIEW ImePogleda [ListaKolona] AS Upit;ImePogleda - unikatno ime u BPUpit naredba upita SELECTPogled nasleuje tipove kolona iz osnovnih tabelaUklanjanje DROP VIEW ImePogleda;

    Predavanja

  • 28.11.2006.Predavanja*Jednostavnost korienja, uproavaju se upitiTajnost, mehanizam za kontrolu pristupa podacima (korisnik vidi samo neke podatke)Performanse, definicija pogleda se uva u kompajliranom, prevedenom oblikuNezavisnost podataka, menjaju se definicije pogleda, a ne aplikacije koji koriste podatke iz BP preko pogledaVrsta potprograma u SQL-uJednom kreiran moe da se koristi u podupitima, u WHERE i HAVING klauzulamaZamenjuje komplikovane upitePrednosti pogleda

    Predavanja

  • 28.11.2006.Predavanja*UPIT- SELECT - Najznaajnija i najee koriena SQL naredba za manipulaciju podacimaKod svakog upita zadajemo (u principu):Koje podatke traimo kao rezultat,Iz kojih tabela to traimo,Koji uslov treba da zadovolje podaci, da bi bili ukljueni u rezultatU kom redosledu elimo prikaz podataka

    Predavanja

  • 28.11.2006.Predavanja*Prost upit nad jednom tabelom Podrazumeva se naredba upita SELECT, nad jednom tabelomKao rezultat daje niz redova (ili jedan ili nijedan) koji zadovoljavaju eventualno zadati uslovSELECT lista podrazumeva se specifikacija podataka u rezultatu upitaSpecifikacija zadata jednim ili sa vie izraza odvojenih zarezima (R-lista)Rezultat upita ne mora biti relacija (unikatnost)

    Predavanja

  • 28.11.2006.Predavanja*Sintaksa SELECT * {[ALL DISTINCT] R-Lista} FROM ImeTabele [WHERE R-Predikat] [ORDER BY ImeKolone [DESC] {, ImeKolone [DESC]} ];* - Specijalni sluaj R-liste, kada u rezultat elimo da ukljuimo sve kolone tabeleALL iz rezultata neuklanja istovetne redove, DISTINCT suprotno. Podrazumeva se ALL.R-Lista se zadaje kao jedan ili vie R-Izraza, pored naziva kolone javljaju se i konstanteProst upit nad jednom tabelom

    Predavanja

  • 28.11.2006.Predavanja*Klauzula FROM (odakle), specificira se ImeTabele. To je ime osnovne tabele ili pogleda nad kojim se vri upit. Ovo je obavezna klauzula.R_Predikat , uslov prikazivanja rezultata, to je logiki izraz izraunljiv nad svakim pojedinim redom tabele. Rezultat upita se dobija samo za one vrednosti R_Predikata koje daju istinitosnu vrednost. Najee je to relacioni izraz (>,
  • 28.11.2006.Predavanja*Najjednostavniji mogui SQL upit je u formi: SELECT * FROM ImeTabele;Ova naredba prikazuje sve redove tabele ije je ime navedeno iza FROM klauzuleU svakom redu prikazuju se vrednosti svih kolona, onim redom kako je to zapisano u datoteci (tj. kreirano sa CREATE TABLE)Kod upita se obino trai prikaz samo odreenih kolona, ili prikaz svih kolona u redosledu koji je drugaije odreen.Ovo odgovara operaciji projekcije, ali se ne elimiu viestruka ponavljanja istih vrednostiProst upit nad jednom tabelom

    Predavanja

  • 28.11.2006.Predavanja*Primeri: Upiti sa dobijenim rezultatimaUpit za prikaz cele tabele (simbol *)Ogovara restrikciji - kada nema uslova P SELECT * FROM Student ;Prost upit nad jednom tabelom StudentSELECT

    BrIndImePrezime1MarkoMarkovi2PetarPetrovi3AleksaPeri

    BrIndImePrezime1MarkoMarkovi2PetarPetrovi3AleksaPeri

    Predavanja

  • 28.11.2006.Predavanja*Upit za prikaz cele tabele u eljenom redosledu SELECT * FROM Student ORDER BY Ime;Prost upit nad jednom tabelom 28.11.2006.Predavanja*StudentSELECT

    BrIndImePrezime1MarkoMarkovi2PetarPetrovi3AleksaPeri

    BrIndImePrezime1AleksaPeri2MarkoMarkovi3PetarPetrovi

    Predavanja

  • 28.11.2006.Predavanja*Upit za prikaz samo jedne kolone iz tabele i bez eliminacije duplikata SELECT Fakultet FROM Student;Prost upit nad jednom tabelom SELECTStudent

    BrIndImePrezimeFakultet1MarkoMarkoviPFB2PetarPetroviFIM3AleksaPeriFIM4MarkoMariFTHM5PetarLaziPFB6JovanMariPFB

    FakultetPFBFIMFIMFTHMPFBPFB

    Predavanja

  • 28.11.2006.Predavanja*Upit za prikaz samo jedne kolone iz tabele i sa eliminacijom duplikata : SELECT DISTINCT Fakultet FROM Student ;Prost upit nad jednom tabelom 28.11.2006.PredavanjaSELECTStudent

    BrIndImePrezimeFakultet1MarkoMarkoviPFB2PetarPetroviFIM3AleksaPeriFIM4MarkoMariFTHM5PetarLaziPFB6JovanMariPFB

    FakultetPFBFIMFTHM

    Predavanja

  • 28.11.2006.Predavanja*Upit za prikaz samo jedne kolone iz tabele i sa eliminacijom duplikata , a u eljenom redosledu: SELECT DISTINCT Fakultet FROM Student ORDER BY Fakultet ;Prost upit nad jednom tabelom 28.11.2006.PredavanjaSELECTStudent

    BrIndImePrezimeFakultet1MarkoMarkoviPFB2PetarPetroviFIM3AleksaPeriFIM4MarkoMariFTHM5PetarLaziPFB6JovanMariPFB

    FakultetFIMFTHMPFB

    Predavanja

  • 28.11.2006.Predavanja*Upit za prikaz vie kolona sa zadavanjem uslova: SELECT BrInd, Ime, Prezime FROM Student WHERE Fakultet=FIM; Prost upit nad jednom tabelom SELECTStudent

    BrIndImePrezimeFakultet1MarkoMarkoviPFB2PetarPetroviFIM3AleksaPeriFIM4MarkoMariFTHM5PetarLaziPFB6JovanMariPFB

    BrIndImePrezime2PetarPetrovi3AleksaPeri

    Predavanja

  • 28.11.2006.Predavanja*Upit za prikaz dve kolone sa zadavanjem uslova, a u eljenom redosledu: SELECT BrInd, Ime, Prezime FROM Student WHERE Fakultet=FIM ORDER BY Ime; Prost upit nad jednom tabelom SELECTStudent

    BrIndImePrezimeFakultet1MarkoMarkoviPFB2PetarPetroviFIM3AleksaPeriFIM4MarkoMariFTHM5PetarLaziPFB6JovanMariPFB

    BrIndImePrezime3AleksaPeri2PetarPetrovi

    Predavanja

  • 28.11.2006.Predavanja*Prost upit nad jednom tabelom sa izvedenim rezultatomPodrazumeva se naredba upita SELECT nad jednom tabelom koja kao rezultat daje jedan red podataka koji su izvedeni iz svih redova tabele, koji zadovoljavaju zadati uslovSELECT lista takvog upita se sastoji iz jednog ili vie izraza (G-Lista i G-Izrazi)Zadavanje redosleda redova u rezultatu nema smisla (dobija se samo jedan red)

    Predavanja

  • 28.11.2006.Predavanja*Sintaksa za SELECT (prost upit nad jednom T sa izvedenim rezultatom) SELECT G-Lista FROM ImeTabele [WHERE R-Predikat];G-Izrazi: najee ih ine posebne SQL funkcije (svodne ili agregatne funkcije)Svodne funkcije:SUM (ImeKolone)Nalazi sumu svih ne-NULL vrednosti zadate koloneAVG (ImeKolone)Nalazi prosenu vrednost svih ne-NULL vrednosti zadate koloneProst upit nad jednom tabelom sa izvedenim rezultatom

    Predavanja

  • 28.11.2006.Predavanja*MIN (ImeKolone)Nalazi minimalnu vrednost svih ne-NULL vrednosti zadate koloneMAX (ImeKolone)Nalazi maksimalnu vrednost svih ne-NULL vrednosti zadate koloneCOUNT(*)Nalazi ukupan broj redova u tabeliCOUNT([ALLDISTINCT] ListaKolona) Bez DISTINCT nalazi ukupan broj ne-NULL vrednosti zadate kombinacije kolona Sa DISTINCT nalazi ukupan broj razliitih ne-NULL vrednosti zadate kombinacije kolonaProst upit nad jednom tabelom sa izvedenim rezultatom

    Predavanja

  • 28.11.2006.Predavanja*Upit za prikaz ukupnog broja studenata (odgovara broju redova u tabeli Student) SELECT COUNT(*) FROM Student ;Prost upit nad jednom tabelom sa izvedenim rezultatomSELECT6Student

    BrIndImePrezimeFakultet1MarkoMarkoviPFB2PetarPetroviFIM3AleksaPeriFIM4MarkoMariFTHM5PetarLaziPFB6JovanMariPFB

    Predavanja

  • 28.11.2006.Predavanja*Upit za prikaz broja fakulteta na koje su upisani studenati (odgovara broju razliitih vrednosti kolone Fakultet u tabeli Student) SELECT COUNT(DISTINCT Fakultet) FROM Student ;Prost upit nad jednom tabelom sa izvedenim rezultatomSELECT3Student

    BrIndImePrezimeFakultet1MarkoMarkoviPFB2PetarPetroviFIM3AleksaPeriFIM4MarkoMariFTHM5PetarLaziPFB6JovanMariPFB

    Predavanja

  • 28.11.2006.Predavanja*Upit za prikaz broja studenata koji su upisali FTHM SELECT COUNT(*) FROM Student WHERE Fakultet=FTHM;Prost upit nad jednom tabelom sa izvedenim rezultatomSELECT1Student

    BrIndImePrezimeFakultet1MarkoMarkoviPFB2PetarPetroviFIM3AleksaPeriFIM4MarkoMariFTHM5PetarLaziPFB6JovanMariPFB

    Predavanja

  • 28.11.2006.Predavanja*Upit za prikaz sume cena svih proizvoda: SELECT SUM(Cena) FROM Racun;Prost upit nad jednom tabelom sa izvedenim rezultatom28.11.2006.PredavanjaSELECT1800+300+250+1100 ....Racun

    SifPNazivPKolicinaCena005P111800,00010P26300,00020P35250,00001P321100,00003P34600,00011P13700,00

    Predavanja

  • 28.11.2006.Predavanja*Upit za prikaz minimalne i maksimalne cene iz rauna: SELECT MIN(Cena), MAX(Cena) FROM Racun;Prost upit nad jednom tabelom sa izvedenim rezultatomSELECT1800 250Racun

    SifPNazivPKolicinaCena005P111800,00010P26300,00020P35250,00001P321100,00003P34600,00011P13700,00

    Predavanja

  • 28.11.2006.Predavanja*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)Prost upit nad jednom tabelom sa izvedenim rezultatomSELECT2500 1250Racun

    SifPNazivPKolicinaCena005P111800,00010P26300,00020P35250,00001P321100,00003P34600,00011P13700,00

    Predavanja

  • 28.11.2006.Predavanja*SELECT SifC, SUM(Dana) FROM Pozajmica; Ovde je SifC podatak na nivou jednog reda, a SUM(Dana) podatak sveden iz vie redovaProst upit nad jednom tabelom sa izvedenim rezultatom

    Predavanja

  • 28.11.2006.Predavanja*Svodni upit nad jednom tabelom Prethodni primer: eleo se prikaz sume trajanja pozajmica po iframa lanova.Dopuna: Prikazati samo podatke za lanove za koje je npr. trajanje pozajmice >10Postupak je sledei:Od tabele Pozajmica formira se meurezultat sa kolonama (SifC i Dana) grupisane po SifCFormira se nova tabela sa jednom vrednou za SifC i izraunate SUM (Dana) po SifCPrikazati redove koji zadovoljavaju traeni uslov

    Predavanja

  • 28.11.2006.Predavanja*SifP SifC SifK Dana 1 JJ0 004 5 2 PP0 007 2 3 JJ1 005 6 4 JJ0 008 7 5 PP0 002 4 6 JJ1 009 3SifC DanaJJ0 5JJ0 7PP0 2PP0 4JJ1 6JJ1 3SifC DanaJJ0 12PP0 6JJ1 9RezultatJJ0 12Uslov:SUM(Dana)>10Potrebno je dodatno precizirati:Po kojim kolonama se vri grupisanje, i koje svodne funkcije se trae unutar grupeKoji uslov se zadaje za ukljuenje svodnih redova u rezultatSvodni upit nad jednom tabelom

    Predavanja

  • 28.11.2006.Predavanja*Sintaksa za SELECT za svodni upit nad jednom tabelom SELECT ListaKolona [ListaFunkcija] FROM ImeTabele [WHERE R-Predikat] GROUP BY ListaKolona HAVING G-Predikat [ORDER BY Element [DESC] {, Element [DESC]} ];Svodni upit nad jednom tabelom

    Predavanja

  • 28.11.2006.Predavanja*WHERE, zadaje se uslov koji svaki red u tabeli ImeTabele mora da zadovoljiGROUP BY, navodi se jedna ili vie kolona po kojima se vri grupisanje Kolone koje se navode ne moraju biti uz SELECT Kolene koje su uz SELECT moraju se nai uz GRUP BYHAVING, formira se uslov koji svaki red formiran svoenjem mora da zadovolji da bi bio ukljuen u rezultat Mogu da se jave kolone i funkcije koje nisu uz SELECTORDER BY, mogu se kao Element navoditi samo kolone ili funkcije koje su navedene uz klauzulu SELECTSvodni upit nad jednom tabelom

    Predavanja

  • 28.11.2006.Predavanja*SifP SifC SifK Dana 1 JJ0 004 5 2 PP0 007 2 3 JJ1 005 6 4 JJ0 008 7 5 PP0 002 4 6 JJ1 009 3SifC DanaJJ0 5JJ0 7PP0 2PP0 4JJ1 6JJ1 3SifC DanaJJ0 12PP0 6JJ1 9RezultatJJ0 12HEAVINGSUM(Dana)>10Svodni upit nad jednom tabelom GROUP BYSifC, Dana

    Predavanja

  • 28.11.2006.Predavanja*Primeri: Upit za prikaz ifara autora i broja naslova koje su napisali SELECT SifA, COUNT(*)AP0 1 FROM Je_Autor JN0 1 GROUP BY SifA ;DM0 2ZP0 2 AP1 1 IT0 1Svodni upit nad jednom tabelom

    Predavanja

  • 28.11.2006.Predavanja*Upit za prikaz ifara lanova ija je suma trajanja pozajmice vea od 10 SELECT SifCJJ0 FROM Pozajmica GROUP BY SifC HAVING SUM(Dana)>10;Upit za prikaz ifara lanova i njihovog ukupnog broja i trajanja pozajmica, ali samo za pozajmice due od 2 dana SELECT SifC,COUNT(*), SUM(Dana) FROM Pozajmica JJ0 2 12 WHERE Dana>2 PP0 1 4 GROUP BY SifC;JJ1 2 9Svodni upit nad jednom tabelom

    Predavanja

  • 28.11.2006.Predavanja*Upiti nad vie tabela Podrazumevaju spajanje tabela po nekom uslovu Iza FROM klauzule SELECT naredbe navodi se vie tabela odvojenih zarezimaSintaksa: SELECT * {[ALL DISTINCT] R-Lista} FROM ImeTabele [NadimakTabele] {,} [WHERE R-Predikat] [ORDER BY ImeKolone [DESC] {, ImeKolone [DESC]} ];

    Predavanja

  • 28.11.2006.Predavanja*Za kolone koje se nalaze u vie tabele obavezno je navoenjeImeTabele.ImeKoloneNadimakTabele.ImeKoloneR-Predikat- navodi se uslov spajanja u formi uslova jednakosti vrednosti odgovarajuih kolona u tabelamaUpit nad vie tabela bez uslova spajanja daje kao rezultat Dekartov proizvod tih tabelaUpiti nad vie tabela

    Predavanja

  • 28.11.2006.Predavanja*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 ; Upiti nad vie tabela

    Predavanja

  • 28.11.2006.Predavanja*Upit koji daje ifre i nazive naslova knjiga koje lanovi dre kod sebe (spajaju se tabele Drzi, Knjiga i Naslov po dva uslova jednakosti kolona koja se kombinuju sa AND) SELECT DISTINCT N.SifN, Naziv FROM Drzi D, Knjiga K, Naslov N WHERE D.SifK=K.SifK AND K.SifN=N.SifN;

    Upiti nad vie tabela

    Predavanja

  • 28.11.2006.Predavanja*Upit koji daje imena lanova koji su pozajmljivali knjige (spajaju se tabele Pozajmica i Clan po uslovu jednakosti kolona SifC, svako ime treba da se javi samo jednom u rezultatu) SELECT DISTINCT C.SifC, Ime FROM Clan C, Pozajmica P WHERE C.SifC=P.SifC;Upiti nad vie tabela

    Predavanja

  • 28.11.2006.Predavanja*Prost upit sa svodnim rezultatom nad vie tabela Sintaksa: SELECT G-Lista FROM ImeTabele [NadimakTabele] {,} [WHERE R-Predikat]Primer: Upit koji daje ukupno trajanje pozajmica svih knjiga sa ifrom naslova PP00 SELECT SUM(Dana) FROM Pozajmica P, Knjiga K WHERE P.SifK=K.SifK AND SifN=PP00

    Predavanja

  • 28.11.2006.Predavanja*Klauzule WHERE i HAVINGPredikati to su relacioni izrazi, koji se mogu kombinovatiPredikati: prosti i sloeniProst predikat: elementarni logiki izraz izraunljiv nad svakim redom neke tabeleSloen predikat: formira se od prostih, primenom logikih operatora AND, OR i NOTForme prostih predikata: Izraz1 {} Izraz2 ispituje da li su vrednosti navedenih izraza u zadatom odnosu

    Predavanja

  • 28.11.2006.Predavanja*Izraz [NOT] BETWEEN Izraz1 AND Izraz2 ispituje da li je (ili nije) vrednost izraza u zadatim granicama. Ekvivalentno bi bilo: [NOT] Izraz>=Izraz1 AND Izraz
  • 28.11.2006.Predavanja*Izraz [NOT] IN (Konstanta {, Konstanta}) ispituje da li je (ili nije) vrednost izraza jednaka nekoj od navedenih konstanti (isti tip)Izraz {} ANY (Konstanta {, Konstanta}) ispituje da li je (ili nije) vrednost izraza u navedenom odnosu sa bar jednom konstantomIzraz {} ALL (Konstanta {, Konstanta}) ispituje da li je (ili nije) vrednost izraza u navedenom odnosu sa svim navedenim konstantama (zahteva se isti tip)Klauzule WHERE i HAVING

    Predavanja

  • 28.11.2006.Predavanja*Primeri upotrebe: Upiti za RBP BIBLIOTEKA sa dobijenim rezultatimaUpit koji daje ifre lanova i ukupna trajanja pozajmica od 5 do 10 dana: SELECT SifC,SUM(Dana) FROM Pozajmica GROUP BY SifC HAVING SUM(Dana) BETWEEN 5 AND 10;Upit koji daje nazive svih naslova u kojima se nalazi re jezik SELECT Naziv FROM Naslov WHERE Naziv LIKE %jezik% ;Klauzule WHERE i HAVING

    Predavanja

  • 28.11.2006.Predavanja*Upit koji daje ifre knjiga koje odgovaraju naslovima ifara RBP0 i RK00 SELECT SifK FROM Knjiga WHERE SifN IN (RBP0,RK00);Prethodni upit, uz upotrebu ANY forme SELECT SifK FROM Knjiga WHERE SifN ANY (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);Klauzule WHERE i HAVING

    Predavanja

  • 28.11.2006.Predavanja*Upiti sa podupitimaDefinicija podupita:SELECT naredba koja se nalazi u sklopu WHERE i HAVING klauzulaIzvravanje podupita prethodi vrednovanju predikata u datim klauzulama

    Predavanja

  • 28.11.2006.Predavanja*Klasifikacija podupita po nainu izvravanja:Nekorelisani podupit njegovo izvravanje ne zavisi od izvravanja spoljnog upita; Izvrava se samo jednom na poetku.Korelisani podupit njegovo izvravanje zavisi od spoljnog upita; Izvrava se za svaki red tabele koju obrauje spoljni upitPosebna forma prostog predikata: [NOT] EXISTS (R-Upit) Utvruje se ishod podupita. Ako R-Upit kao rezultat daje bar jedan red, EXISTS daje vrednost istina. U suprotnom je nije istina.Upiti sa podupitima

    Predavanja

  • 28.11.2006.Predavanja*Primer 1: Sastaviti upit koji daje podatke o pozajmicama natprosenog trajanja. 1) Odreuje se prosek trajanja svih pozajmica 2) Trajanje svake pozajmice poredimo sa dobijenom srednjom vrednosti SELECT * FROM Pozajmica WHERE Dana > (SELECT AVG (Dana) FROM Pozajmica);Radi se o nekorelisanom podupituUpiti sa podupitima

    Predavanja

  • 28.11.2006.Predavanja*Primer 2: Sastaviti upit koji daje imena lanova ije je ukupno trajanje pozajmica vee od 10 dana. Za svakog lana iz tabele Clan treba prema njegovoj ifri utvrditi da li je njegovo ukupno trajanje pozajmica iznad 10 SELECT Ime FROM Clan C WHERE 10 < (SELECT SUM (Dana) FROM Pozajmica WHERE SifC=C.SifC);Podupit je korelisan i izvrava se za svakog lanaSpoljna SELECT odreuje kolonu koja se koristi u podupituUpiti sa podupitima

    Predavanja

  • 28.11.2006.Predavanja*Primer 3: Sastaviti upit koji daje imena lanova koji dre knjige. Ovo je primer za korienje IN forme predikata. ifre lanova koji dre knjige daje nekorelisani podupit SELECT Ime FROM Clan WHERE SifC IN (SELECT SifC FROM Drzi); Upiti sa podupitima

    Predavanja

  • 28.11.2006.Predavanja*Primer 4: Sastaviti upit koji daje podatke o pozajmicama koje su trajale due od svih pozajmica lana ifre PP0. Reenje primenom ALL konstrukcije SELECT * FROM Pozajmica WHERE Dana > ALL (SELECT Dana FROM Pozajmica WHERE SifC=PP0); Upiti sa podupitima

    Predavanja

  • 28.11.2006.Predavanja*Unija, razlika i presek upitaPrimena skupovnih operatora na skupove redova koje daju pojedini upitiUpiti koji se kombinuju moraju zadovoljavati uslov unijske kompatibilnostiDefinicija klauzula:UNION [ALL] unija dva upita sa eliminacijom identinih, ako se ne naglasi ALLINTERSECT presek dva upita, ostaju samo oni redovi koji se nalaze u rezultatima oba upitaEXCEPT razlika dva upita, od redova upita ispred except klauzule ostaju samo oni koji se ne nalaze u rezultatu upita iza te klauzule (MINUS)

    Predavanja

  • 28.11.2006.Predavanja*Primer 1: Sastaviti upit koji daje ifre knjiga koje su bile u prometu lanovi ih dre kod sebe ili su ranije pozajmljivane. SELECT SifK FROM Drzi UNION SELECT DISTINCT SifK FROM Pozajmica;Unija, razlika i presek upita

    Predavanja

  • 28.11.2006.Predavanja*Primer 2: Sastaviti upit koji daje naslove knjiga koje su kod lanova, a ranije nisu pozajmljivane SELECT DISTINCT Naziv FROM Naslov N, Knjiga K WHERE N.SifN=K.SifN AND SifK IN (SELECT SifK FROM Drzi EXCEPT SELECT DISTINCT SifK FROM Pozajmica);Unija, razlika i presek upita

    Predavanja

    **