baze podataka - lekcija 03.pdf

Upload: asxov

Post on 04-Jun-2018

233 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/14/2019 baze podataka - lekcija 03.pdf

    1/16

    1

    NAREDBA SELECT I

    Ciljevi lekcije

    Upoznati se podrkom koju SQL prua za pretraivanje podataka Upoznati osnovnu strukturu SQL naredbe SELECT Nauiti osnove korienja naredbe SELECT za pretraivanje podataka u jednoj tabeli Upoznati se sa podranim logikim operatorima Upoznati se sa podranim aritmetikim operatorima i funkcijama za agregaciju podataka

    Pretraivanje i pribavljanje podataka su najee operacije koje korisnici izvravaju u relacionoj bazi podataka.Za pretraivanje i pribavljanje podataka SQL programski jezik obezbeuje naredbu SELECT. Naredba

    SELECT pribavlja podatke iz jedne tabele ili vie povezanih tabela koje se nalaze u relacionoj bazi podataka. U

    svom osnovnom obliku naredba SELECT ne moe ni na koji nain da izmeni podatke koji se nalaze u

    relacionoj bazi podataka.

    Naredba SELECT je deklarativna naredba. Korienjem ove naredbe korisnici imaju moguost samo daspecificiraju rezultate koje ele. Sa druge strane RDBMS je zaduen da isplanira, optimizuje i izvri fizike

    operacije neophodne za generisanje specificiranih rezultata.

    Rezultat SELECT naredbe je uvek relacija. Naredba SELECT koristi podatke iz jedne ili veeg broja tabela,

    manipulite tim podacima i kao rezultat generie tabelu. ak i kada je rezultat obrade skalarna vrednost ona se

    tretira kao tabela sa jednom vrstom i jednom kolonom.

    Neophodno predznanje

    Relacija

    Tabela sa vrstama i kolonama.

    Atribut relacije

    Predstavlja osobinu entiteta predstavljenog relacijom. Atribut je praktino imenovana kolona relacije odnosno

    tabele, koje se odnose na svojstva objekta predstavljenog relacijom.

    Torka relacije

    Vrsta relacije.

    SQL

    Programski jezik koji je projektovan za potrebe pretraivanja i upravljanja podacima u Sistemima za

    upravljanje relacionim bazama podataka (Relational Database Management Systems - RDBMS), za kreiranje i

    modifikacija ema relacione baze podataka i za kontrolu pristupa objektima baze podataka.

  • 8/14/2019 baze podataka - lekcija 03.pdf

    2/16

    2

    NAREDBA SELECT

    Naredba SELECTje jedna od najkompleksnijih naredbi SQL programskog jezika. Ukljuuje vei broj kljunihrei klauzula:

    SELECT- definie listu kolona koje e biti ukljuene u rezultujuu tabelu FROM- definie tabele iz kojih se pribavljaju podaci za potrebe generisanja rezultujue tabele.

    Klauzula FROMmoe da ukljui jednu ili vie opcionih JOINklauzula za povezivanje tabela na

    osnovu kriterijuma zadatih od strane korisnika. WHERE- definie predikat na osnovu koga se ograniava broj vrsta u rezultujuoj tabeli. Ova klauzula

    iz rezultata eliminie sve vrste za koje specificirani predikat ne vraa vrednost TRUE. GROUP BY- grupie vrste koje u odreenim kolonama imaju identine vrednosti. HAVING- definie predikat na osnovu koga se elimiu vrste nakon to je klauzula GROUP BY

    primenjena na rezultujuu tabelu.

    ORDER BY- koristi se za sortiranje rezultujue tabele. Korisnici specificiraju kolone po kojima se vrisortiranje kao i smer sortiranja.

    KLAUZULE SELECT I FROM

    Klauzule SELECT i FROMsu jedine obavezne u okviru SELECTnaredbe. Klauzula FROMspecificiratabele iz kojih se pribavljaju podaci. Ukoliko se navede vie tabela potrebno je specificirati nain spajanja

    tabela. Spajanje tabela e biti detaljno objanjeno u narednoj lekciji. Za sada emo se ograniiti samo na

    pribavljanje podataka iz jedne tabele.

    Klauzula SELECT specificira kolone koje treba ukljuiti u rezultuju

    u tabelu. Mogu se koristiti slede

    e opcije:

    ALL- u rezultujuoj tabeli prikazuju se sve vrste koje zadovoljavaju navedeni predikat DISTINCT - iz rezultujue tabele izbacuju se duplikati vrsta *- rezultujua tabela ukljuuje sve kolone tabele ili tabela iz kojih se pribavljaju podaci tabela.*- rezultujua tabela ukljuuje sve kolone specificirane tabele izraz- ime kolone ili funkcije nad kolonama koja e biti ukljuena u rezultujuu tabelu AS pseudonim- novo ime kolone ili funkcije nad kolonama koje im se dodeljuje u rezultujuoj tabeli

    Primer 1

    U nastavku je dat SQL upit koji prikazuje kompletan sadraj tabele RADNIK

    SELECT * FROM RADNIK;

    Rezultat bi bio ekvivalenta da smo napisali upit kod koga su umesto * navedena imena svih kolona u tabeli.

  • 8/14/2019 baze podataka - lekcija 03.pdf

    3/16

    3

    SELECT MatBr, ime, Sslovo, Prezime, DatRodj, Adresa, Pol, Plata,

    Rukovodilac, Sektor FROM RADNIK;

    Primer 2

    Ukoliko elimo da prikaemo samo odreene kolone iz tabele RADNIK posle SELECT klauzule naveemo

    imena kolona koje su od interesa. U nastavku je dat SQL upit koji prikazuje samo imena i prezimena radnika.

    SELECT Ime, Prezime FROM RADNIK;

    Redosled kojim su kolone navedene u klauzuli SELECT definie redosled kolona u rezultujuoj tabeli. Unastavku je dat SQL upit koji prikazuje imena i prezimena svih radnika ali u neto drugaijem redosledu.

    SELECT Prezime, Ime FROM RADNIK;

    Primer 3

    U nastavku je dat SQL upit koji za svakog radnik odreuje matini broj njegovog neposrednog rukovodioca.

    SELECT Rukovodilac FROMRADNIK;

  • 8/14/2019 baze podataka - lekcija 03.pdf

    4/16

    4

    Moemo da primetimo da se u rezultujuoj tabeli neki matini brojevi javljaju vie puta. To je posledica

    injenice da vei broj radnika moe imati istog rukovodioca. Ukoliko elimo da eliminiemo duplikate

    koristiemo kljunu reDISTINCT.

    SELECT DISTINCTRukovodilac FROMRADNIK;

    KLAUZULA WHERE

    Klauzula WHERE specificira uslov na osnovu koga se kreira rezultujua tabela. U rezultujuu tabelu e bitiukljuene samo one vrste koje zadovoljavaju specificirani uslov. U uslovu se mogu javiti:

    1. Relacioni operatori2. Logiki operatori3. Operator BETWEEN4. Operator IN5. Operator LIKE6. Operator IS NULL

    SQL podrava est relacionih operatora koji imaju sledee znaenje:

    Primer 4

    U ovom primeru dat je SQL upit koji prikazuje podatke o radnicima koji se prezivaju Petrovi.

    SELECT *

    FROMRADNIK

    WHEREPrezime = "Petrovi";

    1. = Jednako

    2. Nije jednako (razliito)

    3. < Manje od

    4. > Vee od

    5. = Vee ili jednako od

  • 8/14/2019 baze podataka - lekcija 03.pdf

    5/16

    5

    Treba primetiti da se tekstualni podaci zadaju korienjem znaka navoda: "Petrovi".

    Primer 5

    Primer sadri SQL upit koji prikazuje imena i prezimena radnika ija je plata jednaka ili vea od 40000.

    SELECT Ime, Prezime

    FROMRADNIK

    WHEREPLATA >= 40000;

    LOGIKI OPERATORI

    SQL omoguava korienje standardnih logikih operatore AND, ORi NOT, ali i operatore INi BETWEENkoji omoguavaju jednostavnije korienje prethodno navedenih operatora u nekim sluajevima.

    Prioritet logikih operatora je sledei:

    1. NOT2. AND3. OR

    Logiki operatori ANDi ORse koriste na standardni nain. Meutim, kod SQL-a, logiki operator negacijeNOTse navodi na poetku logikog izraza, a ne ispred operatora poreenja. Na primer, NOT A = Bje validniWHERE uslov, ali A NOT = Bnije.

    Primer 6

    Ukolimo elimo da prikaemo podatke o radnicima koji se prezivaju Petrovii ija je plata jednaka ili vea od

    40000 moemo koristiti SQL upit koji je dat u nastavku.

    SELECT *

  • 8/14/2019 baze podataka - lekcija 03.pdf

    6/16

    6

    FROMRADNIK

    WHEREPrezime = "Petrovi"ANDPlata >= 40000;

    Primer 7

    U nastavku je dat SQL upit koji prikazuje podatke o radnicima koji se prezivaju Petrovii ija je plata jednaka

    ili vea od 40000.

    SELECT *

    FROMRADNIK

    WHEREPrezime = "Petrovi"AND NOTPlata >= 40000;

    Primer 8

    Primer sadri SQL upit koji prikazuje podatke o radnicima koji se prezivaju Petroviili se prezivaju Jovanovi.

    SELECT*

    FROMRADNIK

    WHEREPrezime = "Petrovi" ORPrezime = "Jovanovi";

    OPERATOR IN

    Operator INzamenjuje viestruku upotrebu operatora ORi = . Operator NOT INprikazuje sve vrste osim onihodreenih INlistom.

    Primer 9Korienjem operatora INizdvajaju se samo radnici koji se prezivaju Petroviili Jovanovi.

    SELECT *

  • 8/14/2019 baze podataka - lekcija 03.pdf

    7/16

    7

    FROMRADNIK

    WHEREPrezime IN("Petrovi","Jovanovi");

    Naredni upit pribavlja podatke o svim radnicima osim onih koji se prezivaju Petroviili Jovanovi.

    SELECT *

    FROMRADNIK

    WHEREPrezimeNOTIN("Petrovi","Jovanovi");

    OPERATOR BETWEEN

    Operator BEETWEEN zamenjuje viestruku upotrebu operatora AND i =. Ovaj operator omoguavaispitivanje da li je vrednost atributa/kolone u zadatom opsegu.

    Primer 10

    Za prikazivanje podataka o radnicima ija je plata u opsegu od 30000 do 40000 (ukljuujui i granice opsega)

    moemo iskoristiti operator BETWEEN.

    SELECT *

    FROMRADNIK

    WHEREPlata BETWEEN30000AND40000;

  • 8/14/2019 baze podataka - lekcija 03.pdf

    8/16

  • 8/14/2019 baze podataka - lekcija 03.pdf

    9/16

    9

    KLAUZULA ORDER BY

    Klauzula ORDER BYspecificira redosled prikazivanja vrste rezultujue tabele, sortiranjem po vrednosti nekihkolona u rastui (ASC) (predefinisana vrednost) ili opadajui redosled (DESC). Ukoliko klauzula ODER BYnije navedena vrste u rezultujuoj tabeli su poreane po sluajnom principu i ne postoji nikakva garancije da e

    isti upit uvek generisati rezultujuu tabelu ije su vrste poreane na isti nain.

    Primer 13

    U nastavku je dat SQL upit koji prikazuje podatke o radnicima i sortira ih prema prezimenu u opadajuem i

    rastuem redosledu.

    SELECT*

    FROMRADNIK

    ORDER BYPrezime;

    Obratite panju da ukoliko vrste sortirate u rastuem redosledu nije potrebno eksplicitno navesti smer

    sortiranja. Rastui redosled je podrazumevan u ORDER BYklauzuli.

    SELECT*

    FROMRADNIK

    ORDER BYPrezime DESC;

    Primer 14

    Sortiranje je mogue vriti na osnovu vrednosti vie kolona. SQL upit u nastavku sortira podatke o radnicima

    prema broju sektora u opadajuem redosledu a prema prezimenu u rastuem redosledu.

    SELECT*

    FROMRADNIK

    ORDER BYSektor DESC, PrezimeASC;

  • 8/14/2019 baze podataka - lekcija 03.pdf

    10/16

    10

    ARITMETIKE FUNKCIJE

    SQL dozvoljava korienje matematikih funkcija u SELECT i WHEREklauzulama. Na taj nain se kao

    rezultat pretraivanja mogu prikazati rezultati izraunavanja nekog matematikog izraza.

    Primer 15

    U nastavku je dat SQL upit koji prikazuje imena i prezimena radnika kao i njihove plate uveane za bonus od

    5000.

    SELECTIme, Prezime, Plata + 5000ASPlataSaBonusom

    FROMRADNIK;

    Obratite panju da je rezultatu matematike funkcije (Plata + 5000) dodeljeno ime korienjem sintakse

    pseudonima: AS PlataSaBonusom.

    Aritmetike funkcije se mogu primenjivati i u WHEREklauzuli.

    SELECTIme, Prezime, Plata + 5000AS PlataSaBonusom

    FROMRADNIK

    WHEREPlata + 5000 > 40000;

  • 8/14/2019 baze podataka - lekcija 03.pdf

    11/16

    11

    FUNKCIJE AGREGACIJE

    Funkcije agregacije su dobile naziv po tome to vre agregaciju rezultata upita. Korienje ovih funkcija je

    jednostavno, poto se navode u listi kolona SELECT klauzule koje se prikazuju. Znaenje funkcija je sledee:

    AVG(kolona) - izraunava srednju vrednost datog atributa SUM(kolona) - izraunava sumu svih vrednosti atributa MIN(kolona) - nalazi minimalnu vrednost atributa MAX(kolona) - nalazi najveu vrednost atributa COUNT(*) - nalazi broj vrsta u tabeli (grupi) COUNT(kolona) - nalazi broj broj vrsta sa ne NULL vrednostima kolone COUNT (DISTINCT kolona)- nalazi broj vrsta sa razliitim vrednostima zadate kolone (nije

    podrano od strane MS Access-a)

    Primer 16

    Funkcija COUNT odreuje broj vrsta u rezultujuoj tabeli.

    SELECT COUNT(*)ASPlataSaBonusom

    FROMRADNIK;

    Sledei SQL upit odreuje maksimalnu, minimalnu, prosenu i ukupnu platu svih radnika.

    SELECT MAX(Plata)AS MaxPlata,MIN(Plata)AS MinPlata,

    AVG(Plata)AS ProsPlata, SUM(Plata)AS UkPlata

    FROM RADNIK;

    Primer 17

  • 8/14/2019 baze podataka - lekcija 03.pdf

    12/16

    12

    Posebno je bitno zapamtiti da funkcije agregacije nije mogue koristiti u WHERE klauzuli. To je posledicainjenice da se rezultat funkcija agregacija izraunava nakon to se odrede vrste koje ulaze u sastav rezultujue

    tabele, odnosno nakon obrade predikta koji je zadta u WHERE klauzuli. U nastavku je dat SQL upit koji se NEMOE IZVRITIi koji e GENERISATI GREKU.

    SELECT Ime, Prezime, Plata

    FROMRADNIK

    WHEREPlata >AVG(Plata).

    PRAKTINI RAD: MS ACCESS

    Rad sa SQL programskim jezikom u okviru MS Access-a se bazira na korienju Query objekata u SQL View

    reimu. Za primer emo uzeti najednostavnij upit koji prikazuje sve podatke iz tabele CUSTOMER.

    SELECT* FROMCustomer;

    1. Startujte MS Access Windows, START, Programs, pronai ikonicu za Access

    2. U meniju izaberite stavku File | Open. Prikazae se Open dijalog. Pronaite PREDUZECE.mdb datoteku nadisku, selektujte je i kliknite na dugme Open. Kada se pojavi Security Warning dijalog, kliknite dugme Open da

    bi ste otvorili bazu podataka.

    3. U prozoru PREDUZECE:Database, na Objectstraci izaberite stavku Queries (Slika 1).

    Slika 1

  • 8/14/2019 baze podataka - lekcija 03.pdf

    13/16

    13

    4. Izaberite stavku Create Query in Design View. Nakon toga se pojavljuje prozor Query 1: Select Queryidijalog Show Table(Slika 2).5. Korienjem dugmeta Close zatvorite Show Tabledijalog. Prikazae se prozor Query 1: Select Querykaona Slici 3. Ovaj prozor se koristi za kreiranje upita korienjem MS Access QBE alata. Za sada neemo koristiti

    ovaj alat veemo direktno unositi SQL upite. Obratite panju na SQL Viewdugme na toolbar-u.

    Slika 2

  • 8/14/2019 baze podataka - lekcija 03.pdf

    14/16

    14

    Slika 3

    6. Kliknite na SQL Viewdugme na Query Designtoolbar-u. Prozor Query 1: Select Queryse prebacuje uSQL Viewreim rada (Slika 4). Obratite panju da je komanda SELECT vezapoeta.7. Unesite komandu SELECT* FROMCustomer kao na Slici 5.

    Slika 4

    Slika 5

  • 8/14/2019 baze podataka - lekcija 03.pdf

    15/16

    15

    8. Kliknite na dugme Run na Query Designtoolbar-u. Ukoliko je sve u redu prikazuje se rezultat upita kao naSlici 6.

    9. Da bi ste snimili upit izaberite dugme Savena Query Designtoolbar-u. Pojavie se Save Asdijalog kao naSlici 7.

    Slika 6

    Slika 7

  • 8/14/2019 baze podataka - lekcija 03.pdf

    16/16

    10. Za ime upita unesite Test i kliknite na dugme OK. Upit je snimljen i ime prozora je sada promenjeno uskladu sa novim imenom upita.

    11. Zatvorite prozor Test : Select Query. Objekat Test se sada pojavljuje u listi Query objekata (Slika 8).

    Slika 8

    PITANJA ZA SAMOSTALNI RAD

    SQL upiti

    Pokuajte da reite niz zadataka koji je dat u nastavku. Za reavanje koristite bazu podataka PREDUZEEkoje

    je priloena uz ovaj materijal.

    1. Napisati SQL upit koji prikazuje kompletan sadraj tabele SEKTOR.2. Napisati SQL upit koji prikazuje nazive svih projekata koji postoje u preduzeu, lokacije na kojima se

    nalaze i brojeve sektora koji su zadueni za njih.3. Napisati SQL upit koji odreuje spisak razliitih srodstava koje imaju lanovi porodice.4. Modifikovati upit iz take 2 tako da se podaci sortiraju u opadajuem redosledu po lokacijama na

    kojima se nalaze.

    5. Napisati SQl upit koji prikazuje imena svih projekata koji su locirani u Niu.6. Napisati SQL upit koji prikazuje imena svih projekata ije ime poinje slovom P.7. Napisati SQL upit koji prikazuje imena svih projekata koji su locirani u Pirotu i ije ime poinje slovom

    P.

    8. Napisati SQL upit koji za projekte locirane u Niu ili Leskovcu prikazuje njihova imena i brojevesektora koji su zadueni za njih.

    9. Napisati SQL upit koji prikazuje imena i pol svih lanova porodice koji imaju srodstvo "sin".10.Napisati SQL upit koji odreuje imena i prezimena svih radnika ija bi plata nakon poveanja od 10%

    bila vea od 40000.

    11.Napisati SQL upit koji za tip srodstva sin odreuje broj lanova porodice koji imaju taj tip srodstva.12.Napisati SQL upit koji odreuje prosenu zaradu za radnike koji rade u sektoru broj 4.