structured query language

of 35/35

Post on 02-Nov-2015

213 views

Category:

Documents

0 download

Embed Size (px)

DESCRIPTION

Structured Query Language

TRANSCRIPT

  • Naredba SELECT je jedna od najkompleksnijih naredbi SQL programskog jezika. Ukljuuje vei broj kljunih rei 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 FROM moe da ukljui jednu ili vie opcionih JOIN klauzula 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 vri sortiranje kao i smer sortiranja.

  • Klauzule SELECT i FROM su jedine obavezne u okviru SELECT naredbe.

    Klauzula FROM specificira tabele iz kojih se pribavljaju podaci. Ukoliko se navede vie tabela potrebno je specificirati nain spajanja tabela.

  • Klauzula SELECT specificira kolone koje treba ukljuiti u rezultujuu tabelu. Mogu se koristiti sledee 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 1U 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.

    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. U nastavku 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 FROM RADNIK;

  • 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 re DISTINCT.

    SELECT DISTINCT Rukovodilac FROM RADNIK;

  • Klauzula WHERE specificira uslov na osnovu koga se kreira rezultujua tabela. U rezultujuu tabelu e biti ukljuene samo one vrste koje zadovoljavaju specificirani uslov. U uslovu se mogu javiti: Relacioni operatori Logiki operatori Operator BETWEEN Operator IN Operator LIKE 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 * FROM RADNIK WHERE Prezime = "Petrovi"; 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 FROM RADNIK WHERE PLATA >= 40000;

  • SQL omoguava korienje standardnih logikih operatore AND, OR i NOT, ali i operatore IN i BETWEEN koji omoguavaju jednostavnije korienje prethodno navedenih operatora u nekim sluajevima.

    Prioritet logikih operatora je sledei: NOT AND OR

  • Logiki operatori AND i OR se koriste na standardni nain. Meutim, kod SQL-a, logiki operator negacije NOT se navodi na poetku logikog izraza, a ne ispred operatora poreenja. Na primer, NOT A = B je validni WHERE uslov, ali A NOT = B nije.

    Primer 6 Ukolimo elimo da prikaemo podatke o radnicima koji se prezivaju Petrovi i ija je plata jednaka ili vea od 40000 koji SQL upit moemo koristiti?

  • SELECT * FROM RADNIK WHERE Prezime = "Petrovi" AND Plata >= 40000; Primer 7 U nastavku je dat SQL upit koji prikazuje podatke o radnicima koji se prezivaju Petrovi i ija je plata jednaka ili vea od 40000.

  • SELECT * FROM RADNIK WHERE Prezime = "Petrovi" AND NOT Plata >= 40000;

    Primer 8 Primer sadri SQL upit koji prikazuje podatke o radnicima koji se prezivaju Petrovi ili se prezivaju Jovanovi.

  • SELECT * FROM RADNIK WHERE Prezime = "Petrovi" OR Prezime = "Jovanovi";

  • Operator IN zamenjuje viestruku upotrebu operatora OR i = . Operator NOT IN prikazuje sve vrste osim onih odreenih IN listom. Primer 9 Korienjem operatora IN izdvajaju se samo radnici koji se prezivaju Petrovi ili Jovanovi. SELECT * FROM RADNIK WHERE Prezime IN ("Petrovi","Jovanovi");

  • Naredni upit pribavlja podatke o svim radnicima osim onih koji se prezivaju Petrovi ili Jovanovi.

    SELECT * FROM RADNIK WHERE Prezime NOT IN ("Petrovi","Jovanovi");

  • Operator BEETWEEN zamenjuje viestruku upotrebu operatora AND i =. Ovaj operator omoguava ispitivanje 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 * FROM RADNIK WHERE Plata BETWEEN 30000 AND 40000;

  • Operator LIKE omoguava poreenje vrednosti kolone sa zadatim ablonom. Kod definisanja ablona koristi se procenat (%) i znak pitanja (?). Procenat (%) predstavlja bilo koji mogui znak (broj, slovo, interpunkcijski znak) ili skup znakova. Znak pitanja (?) zamenjuje samo jedan znak.

  • Primer 11 Za zadavanje ablona MS Access koristi neto drugaije simbole. Umesto procenta koristi se zvezdica (*). U narednom primeru * iza slova "J" oznaava proizvoljan broj znakova (0 ili vie), odnosno predstavlja uzorak za poklapanje koji sadri na poetku slovo "J" i proizvoljan broj znakova iza njega. Za nalaenje svih radnika koji imaju "J" na poetku prezimena, moe se koristiti ablon "J%". SELECT * FROM RADNIK WHERE Prezime LIKE "J*"; Za nalaenje svih radnika koji sadre slovo "J" negde u prezimenu mogao bi se koristiti ablon "*J*". Obratite panju da se ne pravi razlika izmeu malih i velikih slova.

  • Operator NOT LIKE prikazuje sve vrste koje ne odgovaraju prethodno datom opisu, tj za prethodni sluaj, sve radnike koji nemaju slovo "J" u svom prezimenu. Operator IS NULLOperator IS NULL se koristi za poreenje sa NULL vrednostima. Treba voditi rauna da se na NULL vrednosti ne moe primeniti ni jedan relacioni operator. Moe se samo proveravati da li kolona ima NULL vrednost ili nema. Primer12 U nastavku je dat SQL upit koji izdvaja podatke o svim radnicima kojima nije definisan datum roenja odnosno datum roenja ima NULL vrednost. SELECT * FROM RADNIK WHERE DatRodj IS NULL;

  • Klauzula ORDER BYKlauzula ORDER BY specificira redosled prikazivanja vrste rezultujue tabele, sortiranjem po vrednosti nekih kolona u rastui (ASC) (predefinisana vrednost) ili opadajui redosled (DESC). Ukoliko klauzula ODER BY nije 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 * FROM RADNIK ORDER BY Prezime;

  • Obratite panju da ukoliko vrste sortirate u rastuem redosledu nije potrebno eksplicitno navesti smer sortiranja. Rastui redosled je podrazumevan u ORDER BY klauzuli. SELECT * FROM RADNIK ORDER BY Prezime 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 * FROM RADNIK ORDER BY Sektor DESC, Prezime ASC; Aritmetike funkcijeSQL dozvoljava korienje matematikih funkcija u SELECT i WHERE klauzulama. 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.

  • SELECT Ime, Prezime, Plata + 5000 AS PlataSaBonusom FROM RADNIK; Obratite panju da je rezultatu matematike funkcije (Plata + 5000) dodeljeno ime korienjem sintakse pseudonima: AS PlataSaBonusom. Aritmetike funkcije se mogu primenjivati i u WHERE klauzuli. SELECT Ime, Prezime, Plata + 5000 AS PlataSaBonusom FROM RADNIK WHERE Plata + 5000 > 40000;

  • Funkcije agregacijeFunkcije 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(*) AS PlataSaBonusom FROM RADNIK; 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 Posebno je bitno zapamtiti da funkcije agregacije nije mogue koristiti u WHERE klauzuli. To je posledica injenice 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 NE MOE IZVRITI i koji e GENERISATI GREKU. SELECT Ime, Prezime, Plata FROM RADNIK WHERE Plata > AVG(Plata).

  • Pokuajte da reite niz zadataka koji je dat u nastavku. Za reavanje koristite bazu podataka PREDUZEE koje je priloena uz ovaj materijal. Napisati SQL upit koji prikazuje kompletan sadraj tabele SEKTOR. 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. Napisati SQL upit koji odreuje spisak razliitih srodstava koje imaju lanovi porodice. Modifikovati upit iz take 2 tako da se podaci sortiraju u opadajuem redosledu po lokacijama na kojima se nalaze. Napisati SQl upit koji prikazuje imena svih projekata koji su locirani u Niu. Napisati SQL upit koji prikazuje imena svih projekata ije ime poinje slovom P. Napisati SQL upit koji prikazuje imena svih projekata koji su locirani u Pirotu i ije ime poinje slovom P. Napisati SQL upit koji za projekte locirane u Niu ili Leskovcu prikazuje njihova imena i brojeve sektora koji su zadueni za njih. Napisati SQL upit koji prikazuje imena i pol svih lanova porodice koji imaju srodstvo "sin". Napisati SQL upit koji odreuje imena i prezimena svih radnika ija bi plata nakon poveanja od 10% bila vea od 40000. Napisati SQL upit koji za tip srodstva sin odreuje broj lanova porodice koji imaju taj tip srodstva. Napisati SQL upit koji odreuje prosenu zaradu za radnike koji rade u sektoru broj 4.