100
Baze podataka Baze podataka SQL 1 SQL Jezik relacione BP

BP Lekcija 09_SQL Kreiranja i upiti.pdf

Embed Size (px)

Citation preview

  • Baze podatakaBaze podataka

    SQL 1

    SQLJezik relacione BP

  • SQL - Structured Query Language

    Strukturni upitni jezik za RBP - modifikovana rel. algebra Razvio ga je IBM u okviru projekta System R Danas je SQL ugraen u sve vodee SUBP ANSI standard American National Standards Institute Standardizacija:

    Zatita programa od zastarevanja Vertikalna kompatibilnost Prenosivost programa na druge raunare

    Standardizacija za relacione BP Prvi standard 1986, dopunjen 1989 Znaajnije dopune 1992. (ANSI SQL), 1995., 1999., 2003. Razvoj SQL-a traje i danas

    SQL 2

  • SQL

    ta SQL moe da uradi? SQL can execute queries against a database SQL can retrieve data from a database SQL can insert records in a database SQL can update records in a database SQL can delete records from a database SQL can create new databases SQL can create new tables in a database SQL can create stored procedures in a database SQL can create views in a database SQL can set permissions on tables, procedures, and views

    SQL 3

  • SQL

    Primena SQL-a kod Web prezentacija Za izgradnju Web sajtova koji prikazuju podatke iz baze

    podataka neophodno je sledee: RDBMS database program (i.e. MS Access, SQL Server, MySQL) A server-side scripting language, like PHP or ASP SQL HTML / CSS

    SQL 4

  • 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 raunu n-torki

    SQL 5

  • SQL

    SQL sadri naredbe za: definisanje relacija (shema) auriranje podataka (unos, izmena, brisanje) postavljanje upita sortiranje i formatiranje ispisa aritmetike operacije nad podacima definisanje pogleda (view) kontrolu sigurnosti itd....

    SQL podrava 3 osnovne funkcije BP: definicije, manipulacije i kontrolu

    SQL 6

  • SQL- definicije -

    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 BPDROP TABLE uklanjanje tabele iz BP ALTER TABLE izmena definicije tabeleCREATE INDEX kreiranje indeksaDROP INDEX uklanjanje indeksaCREATE VIEW kreiranje pogledaDROP VIEW uklanjanje pogleda

    SQL 7

  • SQL- manipulacije -

    Manipulacija BP: upit nad bazom podataka (izvetavanje), auriranje (unos, izmena, brisanje)

    (DML Data manipulation Language) SELECT prikaz eljenog sadraja RBP

    UPDATE izmena vrednosti kolona tabeleDELETE izbacivanje redova tabeleINSERT dodavanje redova u tabelu

    SQL 8

  • SQL- kontrola -

    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 9

  • SQL

    SQL neodgovarajui naziv - nije samo upitni jezik SQL 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 korisnika

    Programski: korisnik pokree program u kome su ugraene SQL naredbe, pristup BP je ogranien pravima korisnika i sadrajem programa

    SQL blokovi ugraeni u klasini vii programski jezik

    SQL 10

  • SQL

    Logike operacije: AND, OR i NOT Operacije poreenja:

    =, , , , IN, ANY, ALL, BETWEEN, IS NULL, LIKE,

    Skupovne operacije: UNION, INTERSECT, EXCEPT

    Funkcije nad skupovima podataka: COUNT, SUM, MIN, MAX, AVG

    Izrazi se mogu grupisati pomou zagrada

    SQL 11

  • 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 INTEGER

    REAL: realni broj sa ili bez predznaka, preciznost zavisi od konkreten implement.

    DOUBLE PRECISION: (DOUBLE), proirena preciznost u odnosu na REAL

    DECIMAL(m,n): (DEC(m,n)), decimalni broj sa ili bez predznaka, m-cifara, a n-decimalnih

    SQL 12

  • SQLtipovi podataka

    CHARACTER(n): (CHAR(n)), niz znakova fiksne duine n Konstanta tipa CHAR se pie izmeu jednostrukih

    navodnika VARCHAR(n) - niz znakova duine najvie n TEXT tekst proizvoljne duine Praktino 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)

    SQL 13

  • SQL- sintaksa -

    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 rei

    SQL 14

  • SQL- sintaksa -

    Separator naredbi:naredba1;naredba2;

    FORMAT naredbi: Sledee naredbe su ispravno napisane SELECT *

    FROM studentWHERE BrInd 100;

    SELECT * FROM student WHERE BrInd 100; SELECT *

    FROM studentWHERE

    BrInd 100;SQL 15

  • Kreiranje tabela

    Prilikom kreiranja tabele (definicija njene strukture i osobina) neophodno je navesti: Ime tabele, mora biti unikatno u BP Ime svake kolone, mora biti unikatno unutar tabele Tip svake kolone Jedno ili vie ogranienja za kolone, koje ih imaju Jedno ili vie ogranienja za svaku tabelu, ako postoje

    SQL 16

  • Kreiranje tabela

    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 podataka Uz svaku kolonu mogu se navesti jedno ili vie

    ogranienja za tu kolonu

    SQL 17

  • Kreiranje tabela

    Osnovne klauzule OgranienjeKolone(ogranienje integriteta): NOT NULL u koloni nije dozvoljena NULL UNIQUE u koloni nije dozvoljeno ponavljanje iste

    vrednosti PRIMARY KEY kolona je primarni klju, nije

    dozvoljena NULL vrednost niti ponavljanje vrednosti CHECK (Predikat) svaka vrednost u koloni mora da

    zadovolji uslov zadat logikim izrazom Predikat. U izrazu se ne mogu navoditi druge kolone

    SQL 18

  • Kreiranje tabela

    DEFAULT=Konstanta ako se prilikom unoenja jednog reda podataka u tabelu za kolonu ne zada vrednost, podrazumeva se Konstanta

    REFERENCES ImeTabele - specifikacija referencijalnog integriteta za jednu kolonu

    kolona je strani klju u odnosu na tabelu ImeTabele, mora imati ili vrednost primarnog kljua u toj tabeli ili

    NULL (ako nema NOT NULL ogranienja)

    SQL 19

  • Kreiranje tabela

    Za celu tabelu se mogu zadati: ni jedno, jedno ili vie ogranienja.

    Ogranienja mogu da vae za jednu ili vie kolona UNIQUE(ListaKolona) nije dozvoljeno ponavljanje istih

    vrednosti kombinacija PRIMARY KEY(ListaKolona) navedene kolone su primarni

    klju,... Konstrukcija ListaKolona oznaava:

    ImeKolone {, ImeKolone}SQL 20

  • Kreiranje tabela

    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 ImeTabele DELETE OF ImeTabele

    {RESTRICTED CASCADES NULLS} UPDATE OF ImeTabele

    {RESTRICTED CASCADES NULLS}

    SQL 21

  • Kreiranje tabela

    Sva ogranienja navedena u CREATE TABLE su aktivna u svakom trenutku postojanja tabele

    SUBP e odbiti svaki pokuaj sa tabelom, koji je u suprotnosti sa ogranienjima

    Olakica za projektante i programere BP Provere se ne moraju ugraivati u aplikativne programe Deklarativna mo naredbe CREATE TABLE je od velikog

    znaaja, naroito kod dinamike specifikacije referencijalnog integriteta

    SQL 22

  • Primer

    SQL 23

    Student Profesor

    Predmet

    IspitBrInd

    Ime

    Prezime

    Adresa

    TelefonEmail

    Ime Prezime

    NaucnoZvanjeIdProf

    IdPredmeta Naziv

    Ocena

    Sala

    Datum

    Vreme

  • Primer

    Primer: Student(BrInd, Ime, Prezime, Adresa, Telefon, Email) Profesor(IdProf, Ime Prezime, NaucnoZvanje) Predmet(IdPredmet, Naziv) Ispit(Brind, IdPredmet, IdProf, Ocena, Sala, Datum, Vreme)

    SQL 24

  • Primer

    Kreiranje tabele Studenti CREATE TABLE Studenti (

    BrInd INT PRIMARY KEY CHECK(0

  • Primer

    Kreiranje tabele Predmet CREATE TABLE Predmet (

    IdPredmet VARCHAR(20) PRIMARY KEY, Naziv VARCHAR(20) NOT NULL UNIQUE);

    SQL 26

  • Primer

    CREATE TABLE Ispit (BrInd INT REFERENCES Student, IdPredmet INT REFERENCES Predmet,IdProf INT REFERENCES Profesor,Ocena INT NOT NULL CHECK (5Ocena10),Sala CHAR(5),Datum DATE,Vreme TIME,UNIQUE (Sala, Datum, Vreme),PRIMARY KEY (BrInd,IdPredmeta,IdProf),UPDATE OF Student CASCADES,DELETE OF Student RESTRICTED,UPDATE OF Predmet CASCADES,DELETE OF Predmet RESTRICTED,UPDATE OF Profesor CASCADES,DELETE OF Profesor RESTRICTED);

    SQL 27

  • Uklanjanje tabela

    Izbor dinamike specifikacije referencijalnih integriteta, kod uklanjanja predstavlja delikatnu operaciju

    Ako se nepromiljeno koristi RESTRICTED, namee se krut reim, npr. ne mogu se ukloniti pogreno uneti podaci iz tabele

    Naredba uklanjanja tabele iz BPDROP TABLE ImeTabele ;

    Briu se u BP sve informacije o tabeli ImeTabele Zavisno od SUBP-a:

    tabela koja se uklanja mora biti prazna (u suprotnom SUBP nee izvriti tu naredbu) ili

    ne mora biti prazna (SUBP e obavezno izvriti naredbu)

    SQL 28

  • Kreiranje indeksa

    Indeks pomona datoteka za ubrzanje pristupa podacima u osnovnoj datoteci Poveanje brzine obrade podataka u osnovnim tabelama Analogija sa knjigom i indeksima

    U osnovnoj datoteci zapisi se nalaze u nekom fizikom redosledu (redosled unoenja)

    Indeks moe se preureivati u rastuoj ili opadajuoj vrednosti indeksnog niza

    Sintaksa naredbe kreiranja indeksa:CREATE [UNIQUE] INDEX ImeIndeksa

    ON ImeTabele (ListaKolona)

    SQL 29

  • Kreiranje indeksa

    UNIQUE opcija da indeks mora biti unikatan. U tabeli na koju se indeks odnosi ne sme se vie puta ponoviti vrednost ListaKolona ImeIndeksa unikatni naziv indeksa u BP Ime Tabele tabela na koju se indeks odnosi ListaKolona navoenje jedne ili vie kolona, po kojima

    se formira INDEKS Nad istom tabelom se moe definisati vie indeksa (za

    razliite pristupe podacima) Indeks se moe kreirati odmah (dok je tabela prazna) ili

    naknadnoSQL 30

  • Kreiranje i uklanjanje indeksa

    Klauzula UNIQUE u definiciji indeksa ima efekat na klauzulu UNIQUE kod tabele: SUBP odbija svaku izmenu podataka u tabeli koja

    naruava unikatnost indeksa SUBP odbija kreiranje unikatnog indeksa za tabelu iji

    zateeni sadraj naruava tu unikatnost Indeks se moe bilo kada i bez obzira na sadraj svoje

    tabele ukloniti naredbom:DROP INDEX ImeIndeksa

    SQL 31

  • Indeksi

    Primer: Ako se eli brz pristup podacima u tabeli Ispit po dva osnova, po BrInd i IdPredmeta, kreiraju se dva indeksa:CREATE INDEX Ispit_i1 ON Ispit(BrInd);CREATE INDEX Ispit_i2 ON Ispit(IdPredmeta);

    SQL 32

    Ispit (BrInd, IdPredmeta, ...)AAA01 PJBBD56 PJABC23 RMHHH11 ITABC23 ITAAA10 BPBBB04 ITHHH11 BP

    Ispit_i2 (IdPredmeta)BPBPITITITPJPJRM

    Ispit_i1 (BrInd)AAA01AAA10ABC23ABC23BBB04BBD56HHH11HHH11

  • Indeksi

    Napomene: Svaka indeksna datoteka ima dva dela:

    ListaKolona, po kojima se vri pretraivanje i po kojima se vri ureivanje indeksa

    Indeks - slui za vezu sa osnovnom datot. Indeks za vezu sa osnovnom datotekom je redni broj

    unosa

    SQL 33

  • Indeksi

    SQL 34

    ind BrInd IdPredmeta

    IdProf Ocena ...

    1 AAA01 PJ DZ

    2 BBD56 PJ DZ

    3 ABC23 RM MV

    4 HHH11 IT RP

    5 ABC23 IT RP

    6 AAA10 BP MV

    7 BBB04 IT RP

    8 HHH11 BP MV

    ind BrInd

    1 AAA01

    6 AAA10

    3 ABC23

    5 ABC23

    7 BBB04

    2 BBD56

    4 HHH11

    8 HHH11

    Ispit Ispit_i1

  • Indeksi

    Nisu svi atributi dobri kandidati za indeks. Npr. bit-map, text ili slika

    Po pravilu su strani kljuevi kandidati za indeks Indeksiranje 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.

    SQL 35

  • Izmena postojee tabele

    Naredba ALTER Sintaksa:

    ALTER TABLE ImeTabeleADD (ImeKolone Tip, [ImeKolone Tip]...);

    Primer: U tabelu Odeljenje dodati kolone Sef_Od i Br_ZapALTER TABLE OdeljenjeADD (ef_Od INTEGER, Br_Zap NUMBER(2));

    Primer: U istoj tabeli poveati duinu za Br_ZapALTER TABLE OdeljenjeMODIFY (Br_Zap NUMBER(6));

    SQL 36

  • Kreiranje i uklanjanje pogleda

    Osnovne tabele fiziki postoje na disku Pogled virtuelna (izvedena) tabela Nastaje kao rezultat upita Sintaksa naredbe kreiranja pogleda:

    CREATE VIEW ImePogleda[ListaKolona] AS Upit;

    ImePogleda - unikatno ime u BP Upit naredba upita SELECT Pogled nasleuje tipove kolona iz osnovnih tabela Uklanjanje DROP VIEW ImePogleda;

    SQL 37

  • Prednosti pogleda

    Jednostavnost korienja, uproavaju se upiti Tajnost, mehanizam za kontrolu pristupa podacima

    (korisnik vidi samo neke podatke) Performanse, definicija pogleda se uva u

    kompajliranom, prevedenom obliku Nezavisnost podataka, menjaju se definicije pogleda, a

    ne aplikacije koji koriste podatke iz BP preko pogleda Vrsta potprograma u SQL-u Jednom kreiran moe da se koristi u podupitima, u

    WHERE i HAVING klauzulama Zamenjuje komplikovane upite

    SQL 38

  • UPIT- SELECT -

    SQL je jezik veoma visokog nivoa (very-high-level language) Programer izbegava korienje komplikovanih manipulacija nad

    podacima (to je neophodno u jezicima kao to je C++, Java, itd.)

    Pogodnost SQL-a Upiti su veoma dobro optimizovani Upiti se efikasno izvravaju

    SQL 39

  • UPIT- SELECT -

    Najznaajnija i najee koriena SQL naredba za manipulaciju podacima

    Kod 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

    rezultat U kom redosledu elimo prikaz podataka

    SQL 40

  • UPIT- SELECT -

    Principska ema za postavljanje upita je:SELECT koji atributi

    FROM iz kojih tabelaWHERE uslov nad zapisima date tabele;

    SQL 41

  • UPIT- SELECT -

    Tipian SQL upit:SELECT A1, A2, ..., An

    FROM r1, r2, ...rmWHERE P

    gde su Ai atributi, ri relacije, a P je uslov selekcije (predikat) Navedeni upit je ekvivalentan sledeem upitu relacione

    algebreA1, A2, ..., An(P(r1r2 ... rn))

    Rezultat SQL upita je opet relacija

    SQL 42

  • 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 vie izraza odvojenih zarezima (R-lista)

    Rezultat upita ne mora biti relacija (unikatnost)

    SQL 43

  • Prost upit nad jednom tabelom

    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 tabele ALL 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 konstanteSQL 44

  • Prost upit nad jednom tabelom

    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 (>,

  • Prost upit nad jednom tabelom

    Najjednostavniji mogui 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 (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 eliminiu viestruka ponavljanja istih vrednosti

    SQL 46

  • Prost upit nad jednom tabelom

    Primeri: Upiti sa dobijenim rezultatima Upit za prikaz cele tabele (simbol *) Ogovara restrikciji - kada nema uslova P

    SELECT *FROM Student ;

    SQL 47

    BrInd Ime Prezime1 Marko Markovi2 Petar Petrovi3 Aleksa Peri

    Student

    SELECT

    BrInd Ime Prezime1 Marko Markovi2 Petar Petrovi3 Aleksa Peri

  • Prost upit nad jednom tabelom

    Upit za prikaz cele tabele u eljenom redosleduSELECT *

    FROM StudentORDER BY Ime;

    SQL 4828.11.2006. Predavanja 48

    BrInd Ime Prezime1 Marko Markovi2 Petar Petrovi3 Aleksa Peri

    Student

    SELECT

    BrInd Ime Prezime1 Aleksa Peri2 Marko Markovi3 Petar Petrovi

  • Prost upit nad jednom tabelom

    Upit za prikaz samo jedne kolone iz tabele i bez eliminacije duplikata SELECT Fakultet

    FROM Student; Odgovara upitu relacione algebreFakultet(Student)

    SQL 49

    BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB

    FakultetPFBFIMFIMFTHMPFBPFB

    SELECT

    Student

  • Prost upit nad jednom tabelom

    Upit za prikaz samo jedne kolone iz tabele i sa eliminacijom duplikata :SELECT DISTINCT Fakultet

    FROM Student ;

    SQL 5028.11.2006. Predavanja

    BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB

    FakultetPFBFIMFTHM

    SELECT

    Student

  • 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 StudentORDER BY Fakultet ;

    SQL 5128.11.2006. Predavanja

    BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB

    FakultetFIMFTHMPFB

    SELECT

    Student

  • Prost upit nad jednom tabelom

    Upit za prikaz vie kolona sa zadavanjem uslova:SELECT BrInd, Ime, Prezime

    FROM StudentWHERE Fakultet=FIM;

    SQL 52

    BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB

    SELECT

    Student

    BrInd Ime Prezime2 Petar Petrovi3 Aleksa Peri

  • Prost upit nad jednom tabelom

    Upit za prikaz dve kolone sa zadavanjem uslova, a u eljenom redosledu:SELECT BrInd, Ime, Prezime

    FROM StudentWHERE Fakultet=FIMORDER BY Ime;

    SQL 53

    BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB

    SELECT

    Student

    BrInd Ime Prezime3 Aleksa Peri2 Petar Petrovi

  • Prost upit nad jednom tabelom

    U WHERE klauzuli se mogu koristiti logike i aritmetike operacije:SELECT BrInd, Ime, Prezime

    FROM StudentWHERE Fakultet=FIM OR Fakultet=FTHMORDER BY Ime;

    SQL 54

    BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB

    SELECT

    Student

    BrInd Ime Prezime3 Aleksa Peri4 Marko Mari2 Petar Petrovi

  • Prost upit nad jednom tabelom

    Komanda SELECT moe da sadri aritmetike izraze koji ukljuuju operacije, +, , , /, na konstantama ili atributima:

    SELECT SifP, NazivP, Cena 100FROM Racun;

    SQL 55

    SifP NazivP Kolicina Cena005 P1 1 1800,00010 P2 6 300,00020 P3 5 250,00001 P3 2 1100,00003 P3 4 600,00011 P1 3 700,00

    SELECT

    Racun

    SifP NazivP Cena005 P1 180000,00010 P2 30000,00020 P3 25000,00001 P3 110000,00003 P3 60000,00011 P1 70000,00

  • Prost upit nad jednom tabelom

    Pojedine vrednosti atributa mogu NULL vrednost Predikat IS NULL se koristi za proveru null vrednosti Npr: Nai sve ifre prouzvoda kod kojih je cena NULL

    SELECT SifPFROM RacunWHERE Cena IS NULL ;

    SQL 56

    SifP NazivP Kolicina Cena005 P1 1 1800,00010 P2 6 NULL020 P3 5 250,00001 P3 2 1100,00003 P3 4 NULL011 P1 3 NULL

    SELECT

    Racun

    SifP010003011

  • Prost upit nad jednom tabelomsa izvedenim rezultatom

    Podrazumeva se naredba upita SELECT nad jednom tabelom koja kao rezultat daje jedan red podataka koji su izvedeni iz svih redova tabele, koji zadovoljavaju zadati uslov

    SELECT lista takvog upita se sastoji iz jednog ili vie izraza Zadavanje redosleda redova u rezultatu nema smisla

    (dobija se samo jedan red)

    SQL 57

  • Prost upit nad jednom tabelomsa svodnim rezultatom

    Sintaksa za SELECT (prost upit nad jednom T sa svodnim rezultatom)SELECT G-Izrazi

    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 kolone AVG (ImeKolone) Nalazi prosenu vrednost svih ne-

    NULL vrednosti zadate koloneSQL 58

  • Prost upit nad jednom tabelomsa izvedenim rezultatom

    MIN (ImeKolone) Nalazi minimalnu vrednost svih ne-NULL vrednosti zadate kolone

    MAX (ImeKolone) Nalazi maksimalnu vrednost svih ne-NULL vrednosti zadate kolone

    COUNT(*) Nalazi ukupan broj redova u tabeli COUNT([ALLDISTINCT] ListaKolona)

    Bez DISTINCT nalazi ukupan broj ne-NULL vrednosti zadate kombinacije kolonaSa DISTINCT nalazi ukupan broj razliitih ne-NULL vrednosti zadate kombinacije kolona

    SQL 59

  • Prost upit nad jednom tabelom sa izvedenim rezultatom

    Upit za prikaz ukupnog broja studenata (odgovara broju redova u tabeli Student)SELECT COUNT(*)

    FROM Student ;

    SQL 60

    BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB

    SELECT 6

    Student

  • Prost upit nad jednom tabelom sa izvedenim rezultatom

    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 ;

    SQL 61

    BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB

    SELECT 3

    Student

  • Prost upit nad jednom tabelomsa izvedenim rezultatom

    Upit za prikaz broja studenata koji su upisali FTHMSELECT COUNT(*)

    FROM Student WHERE Fakultet=FTHM;

    SQL 62

    BrInd Ime Prezime Fakultet1 Marko Markovi PFB2 Petar Petrovi FIM3 Aleksa Peri FIM4 Marko Mari FTHM5 Petar Lazi PFB6 Jovan Mari PFB

    SELECT 1

    Student

  • Prost upit nad jednom tabelomsa izvedenim rezultatom

    Upit za prikaz sume cena svih proizvoda:SELECT SUM(Cena)

    FROM Racun;

    SQL 63

    SifP NazivP Kolicina Cena005 P1 1 1800,00010 P2 6 300,00020 P3 5 250,00001 P3 2 1100,00003 P3 4 600,00011 P1 3 700,00

    SELECT 1800+300+250+1100 ....

    Racun

  • Prost upit nad jednom tabelomsa izvedenim rezultatom

    Upit za prikaz minimalne i maksimalne cene iz rauna:SELECT MIN(Cena), MAX(Cena)

    FROM Racun;

    SQL 64

    SifP NazivP Kolicina Cena005 P1 1 1800,00010 P2 6 300,00020 P3 5 250,00001 P3 2 1100,00003 P3 4 600,00011 P1 3 700,00

    SELECT 250 1800

    Racun

  • Prost upit nad jednom tabelomsa izvedenim rezultatom

    Upit za prikaz sume i proseka cena za proizvod P1:SELECT SUM(Cena), AVG(Cena)

    FROM RacunWHERE NazivP= P1;

    Primedba: rezultat AVG funkcije preuzima tip podataka od argumenta (tip kolone)

    SQL 65

    SifP NazivP Kolicina Cena005 P1 1 1800,00010 P2 6 300,00020 P3 5 250,00001 P3 2 1100,00003 P3 4 600,00011 P1 3 700,00

    SELECT 2500 1250

    Racun

  • Prost upit nad jednom tabelomsa izvedenim rezultatom

    Rezultat bilo kog aritemitikog izraza sa NULL je NULL Na primer: 10+NULL daje NULL Agregatne funkcije ignoriu NULL vrednosti

    (izuzev COUNT(*) Poreenje sa NULL daje unknown

    Npr: 10

  • Prost upit nad jednom tabelomsa izvedenim rezultatom

    Istinosna logika sa unknown: OR: (unknown OR true) = true,

    (unknown OR false) = unknown(unknown OR unknown) = unknown

    AND: (true AND unknown) = unknown,(false AND unknown) = false,(unknown AND unknown) = unknown

    NOT: (NOT unknown) = unknown P is unknown je true ako je predikat P unknown Rezultat predikata komande WHERE se tretira kao false

    ako je unknown

    SQL 67

  • Prost upit nad jednom tabelomsa izvedenim rezultatom

    Upit koji nema smisla:SELECT SifC, SUM(Dana)

    FROM Pozajmica;

    Ovde je SifC podatak na nivou jednog reda, a SUM(Dana) podatak sveden iz vie redova

    Pozajmica (SifP,SifC,SifK,Dana)

    SQL 68

  • 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 >10

    Postupak je sledei: Od tabele Pozajmica formira se meurezultat sa

    kolonama (SifC i Dana) grupisane po SifC Formira se nova tabela sa jednom vrednou za SifC i

    izraunate SUM (Dana) po SifC Prikazati redove koji zadovoljavaju traeni uslov

    SQL 69

  • Svodni upit nad jednom tabelom

    SQL 70

    SifP SifC SifK Dana1 JJ0 004 52 PP0 007 23 JJ1 005 64 JJ0 008 75 PP0 002 46 JJ1 009 3

    SifC DanaJJ0 5JJ0 7PP0 2PP0 4JJ1 6JJ1 3

    SifC DanaJJ0 12PP0 6JJ1 9

    RezultatJJ0 12

    Uslov:SUM(Dana)>10

    Potrebno je dodatno precizirati: Po kojim kolonama se vri grupisanje, i koje svodne

    funkcije se trae unutar grupe Koji uslov se zadaje za ukljuenje svodnih redova u

    rezultat

  • Svodni upit nad jednom tabelom

    Sintaksa za SELECT za svodni upit nad jednom tabelomSELECT ListaKolona [ListaFunkcija]

    FROM ImeTabele[WHERE R-Predikat]GROUP BY ListaKolonaHAVING G-Predikat[ORDER BY Element [DESC]

    {, Element [DESC]} ];

    SQL 71

  • Svodni upit nad jednom tabelom

    WHERE, zadaje se uslov koji svaki red u tabeli ImeTabele mora da zadovolji

    GROUP BY, navodi se jedna ili vie kolona po kojima se vri grupisanjeKolone koje se navode ne moraju biti uz SELECTKolene koje su uz SELECT moraju se nai uz GRUP BY

    HAVING, formira se uslov koji svaki red formiran svoenjem mora da zadovolji da bi bio ukljuen u rezultatMogu da se jave kolone i funkcije koje nisu uz SELECT

    ORDER BY, mogu se kao Element navoditi samo kolone ili funkcije koje su navedene uz klauzulu SELECT

    SQL 72

  • Svodni upit nad jednom tabelom

    SQL 73

    SifP SifC SifK Dana1 JJ0 004 52 PP0 007 23 JJ1 005 64 JJ0 008 75 PP0 002 46 JJ1 009 3

    SifC DanaJJ0 5JJ0 7PP0 2PP0 4JJ1 6JJ1 3

    SifC DanaJJ0 12PP0 6JJ1 9

    RezultatJJ0 12

    HEAVINGSUM(Dana)>10

    GROUP BYSifC, Dana

  • Svodni upit nad jednom tabelom

    Primeri: Upit za prikaz ifara autora i broja naslova koje su napisali

    SELECT SifA, COUNT(*) AP0 1FROM Je_Autor JN0 1GROUP BY SifA ; DM0 2

    ZP0 2AP1 1IT0 1

    SQL 74

  • Svodni upit nad jednom tabelom

    Upit za prikaz ifara lanova ija je suma trajanja pozajmice vea od 10SELECT SifC JJ0

    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 danaSELECT SifC,COUNT(*), SUM(Dana)

    FROM Pozajmica JJ0 2 12WHERE Dana>2 PP0 1 4GROUP BY SifC; JJ1 2 9

    SQL 75

  • Svodni upit nad jednom tabelom

    Primer

    SQL 76

    BrInd IdPred IdProf Ocena Sala Datum Vreme100/2007 BP03 MV01 8200/2007 BP03 MV01 7100/2007 OOP02 RP00 6150/2008 BP03 MV01 7250/2008 OOP02 RP00 8300/2006 RM03 MV01 7100/2007 RM03 MV01 9300/2006 RM03 MV01 8

  • Svodni upit nad jednom tabelom

    SELECT BrInd,AVG(Ocena)FROM IspitGROUP BY BrInd;

    SQL 77

    BrInd IdPred IdProf Ocena Sala Datum Vreme100/2007 BP03 MV01 8200/2007 BP03 MV01 7100/2007 OOP02 RP00 6150/2008 BP03 MV01 7250/2008 OOP02 RP00 8300/2006 RM03 MV01 7100/2007 RM03 MV01 9300/2006 RM03 MV01 8

    Ispit

  • Svodni upit nad jednom tabelom

    SELECT IdPred,AVG(Ocena)FROM IspitGROUP BY IdPred;

    SQL 78

    BrInd IdPred IdProf Ocena Sala Datum Vreme100/2007 BP03 MV01 8200/2007 BP03 MV01 7100/2007 OOP02 RP00 6150/2008 BP03 MV01 7250/2008 OOP02 RP00 8300/2006 RM03 MV01 7100/2007 RM03 MV01 9300/2006 RM03 MV01 8

    Ispit

  • Svodni upit nad jednom tabelom

    SELECT IdProf,AVG(Ocena)FROM IspitGROUP BY IdProf;

    SQL 79

    BrInd IdPred IdProf Ocena Sala Datum Vreme100/2007 BP03 MV01 8200/2007 BP03 MV01 7100/2007 OOP02 RP00 6150/2008 BP03 MV01 7250/2008 OOP02 RP00 8300/2006 RM03 MV01 7100/2007 RM03 MV01 9300/2006 RM03 MV01 8

    Ispit

  • Svodni upit nad jednom tabelom

    SELECT IdProf,IdPred,AVG(Ocena)FROM IspitGROUP BY IdProf, IdPred;

    SQL 80

    BrInd IdPred IdProf Ocena Sala Datum Vreme100/2007 BP03 MV01 8200/2007 BP03 MV01 7100/2007 OOP02 RP00 6150/2008 BP03 MV01 7250/2008 OOP02 RP00 8300/2006 RM03 MV01 7100/2007 RM03 MV01 9300/2006 RM03 MV01 8

    Ispit

  • Upiti nad vie tabela

    Podrazumevaju spajanje tabela po nekom uslovu Iza FROM klauzule SELECT naredbe navodi se vie tabela

    odvojenih zarezima Sintaksa:

    SELECT * {[ALL DISTINCT] R-Lista}FROM ImeTabele [NadimakTabele] {,}[WHERE R-Predikat][ORDER BY ImeKolone [DESC]

    {, ImeKolone [DESC]} ];

    SQL 81

  • Upiti nad vie tabela

    Za kolone koje se nalaze u vie tabele obavezno je navoenje ImeTabele.ImeKolone NadimakTabele.ImeKolone

    R-Predikat- navodi se uslov spajanja u formi uslova jednakosti vrednosti odgovarajuih kolona u tabelama

    Upit nad vie tabela bez uslova spajanja daje kao rezultat Dekartov proizvod tih tabela

    SQL 82

  • Upiti nad vie 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 OWHERE N.SifO=O.SifOORDER BY N.Naziv ;

    SQL 83

  • Upiti nad vie tabela

    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, NazivFROM Drzi D, Knjiga K, Naslov N WHERE D.SifK=K.SifK AND K.SifN=N.SifN;

    SQL 84

  • Upiti nad vie tabela

    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, ImeFROM Clan C, Pozajmica P WHERE C.SifC=P.SifC;

    SQL 85

  • 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 KWHERE P.SifK=K.SifK AND SifN=PP00

    SQL 86

  • Klauzule WHERE i HAVING

    Predikati to su relacioni izrazi, koji se mogu kombinovati Predikati: prosti i sloeni Prost predikat: elementarni logiki izraz izraunljiv nad

    svakim redom neke tabele Sloen predikat: formira se od prostih, primenom logikih

    operatora AND, OR i NOT Forme prostih predikata:

    Izraz1 {} Izraz2ispituje da li su vrednosti navedenih izraza u zadatom odnosu

    SQL 87

  • Klauzule WHERE i HAVING

    Izraz [NOT] BETWEEN Izraz1 AND Izraz2ispituje da li je (ili nije) vrednost izraza u zadatim granicama. Ekvivalentno bi bilo:[NOT] Izraz>=Izraz1 AND Izraz

  • Klauzule WHERE i HAVING

    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 konstantom

    Izraz {} ALL (Konstanta {, Konstanta})ispituje da li je (ili nije) vrednost izraza u navedenom odnosu sa svim navedenim konstantama (zahteva se isti tip)

    SQL 89

  • Klauzule WHERE i HAVING

    Primeri upotrebe: Upiti za RBP BIBLIOTEKA sa dobijenim rezultatima

    Upit koji daje ifre lanova i ukupna trajanja pozajmica od 5 do 10 dana:SELECT SifC,SUM(Dana)

    FROM Pozajmica GROUP BY SifCHAVING SUM(Dana) BETWEEN 5 AND 10;

    Upit koji daje nazive svih naslova u kojima se nalazi re jezikSELECT Naziv

    FROM Naslov WHERE Naziv LIKE %jezik% ;

    SQL 90

  • Klauzule WHERE i HAVING

    Upit koji daje ifre knjiga koje odgovaraju naslovima ifara RBP0 i RK00SELECT SifK

    FROM KnjigaWHERE SifN IN (RBP0,RK00);

    Prethodni upit, uz upotrebu ANY formeSELECT SifK

    FROM KnjigaWHERE SifN ANY (RBP0,RK00);

    Upit koji daje ifre naslova za sve knjige osim za one sa iframa 001, 002, 003SELECT DISTINCT SifN

    FROM KnjigaWHERE SifK ALL (001,002, 003);SQL 91

  • Upiti sa podupitima

    Podupit (ugnjedeni upit) je SELECT-FROM-WHERE izraz zadat unutar drugog izraza.

    Definicija podupita: SELECT naredba koja se nalazi u sklopu WHERE i

    HAVING klauzula Izvravanje podupita prethodi vrednovanju predikata u

    datim klauzulama

    SQL 92

  • Upiti sa podupitima

    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 upit

    Posebna 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.

    SQL 93

  • Upiti sa podupitima

    Primer 1: Sastaviti upit koji daje podatke o pozajmicama natprosenog trajanja.1) Odreuje se prosek trajanja svih pozajmica2) Trajanje svake pozajmice poredimo sa dobijenom srednjom vrednosti SELECT *

    FROM Pozajmica WHERE Dana > (SELECT AVG (Dana)

    FROM Pozajmica); Radi se o nekorelisanom podupitu

    SQL 94

  • Upiti sa podupitima

    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 CWHERE 10 < (SELECT SUM (Dana)

    FROM PozajmicaWHERE SifC=C.SifC);

    Podupit je korelisan i izvrava se za svakog lana Spoljni SELECT odreuje kolonu koja se koristi u

    podupituSQL 95

  • Upiti sa podupitima

    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 ImeFROM Clan WHERE SifC IN (SELECT SifC

    FROM Drzi);

    SQL 96

  • Upiti sa podupitima

    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 PozajmicaWHERE SifC=PP0);

    SQL 97

  • Unija, razlika i presek upita

    Primena skupovnih operatora na skupove redova koje daju pojedini upiti

    Upiti koji se kombinuju moraju zadovoljavati uslov unijske kompatibilnosti

    Definicija klauzula: UNION [ALL] unija dva upita sa eliminacijom identinih,

    ako se ne naglasi ALL INTERSECT presek dva upita, ostaju samo oni redovi

    koji se nalaze u rezultatima oba upita EXCEPT razlika dva upita, od redova upita ispred

    except klauzule ostaju samo oni koji se ne nalaze u rezultatu upita iza te klauzule (MINUS)

    SQL 98

  • Unija, razlika i presek upita

    Primer 1: Sastaviti upit koji daje ifre knjiga koje su bile u prometu lanovi ih dre kod sebe ili su ranije pozajmljivane.

    SELECT SifKFROM Drzi

    UNIONSELECT DISTINCT SifK

    FROM Pozajmica;

    SQL 99

  • Unija, razlika i presek upita

    Primer 2: Sastaviti upit koji daje naslove knjiga koje su kod lanova, a ranije nisu pozajmljivane

    SELECT DISTINCT NazivFROM Naslov N, Knjiga KWHERE N.SifN=K.SifN

    AND SifK IN (SELECT SifKFROM Drzi

    EXCEPTSELECT DISTINCT SifK

    FROM Pozajmica);SQL 100