upitni jezik sql - wordpress.com · većina relacionih baza podataka poput oracle baze jedino preko...

40

Upload: others

Post on 04-Feb-2020

4 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina
Page 2: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Šta je SQL? SQL (Structured Query Language) je jezik koji je Američki Institut za Nacionalne Standarde (ANSI - American National Standards Institute) prihvatio kao standardni jezik za relacione baze podataka. Takođe, prihvatila ga je i Internacionalna organizacija za standarde (ISO - International Standards Organization). Većina relacionih baza podataka (poput Oracle baze) jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina korisnika baza podataka upozna komande SQL-a. SQL omogućava korisnicima pristup podacima u sistemima za upravljanje relacionim bazama podataka (npr. Oracle, Sybase, Informix, Microsoft SQL Server).

2

Page 3: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

OSNOVE SQL-a SQL je neproceduralni jezik tj. severu se samo kaže šta da uradi, ali ne i kako to da uradi. Server baze podataka prevodi komande SQL-a u interne procedure koje obrađuju zahtev. SQL je jednostavan zato što sakriva sve detalje obrade podataka.

3

Page 4: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

OSNOVE SQL-a Iskazi SQL jezika mogu se podeliti na četri grupe. To su iskazi za: 1. Pretraživanje - iskazi samo omogućuju prikazivanje postojećih podataka u bazi. Iskazi uvek počinju ključnom rečju SELECT iza koje slede željeni podaci, iskazi i sl. Iskazi pretraživanja ne menjaju podatke u bazi. 2. Manipulaciju - jezik za manipulaciju podacima (DML - Data Manipulation Language). DML iskazi koriste se za menjanje podataka u bazi. 3. Definisanje - jezik za definisanje podataka (DDL - Data Definition Language). DDL iskazi koriste se za kreiranje ili brisanje objekata baze podataka. 4. Kontrolu - jezik za kontrolu podataka (DCL - Data Control Language). DCL iskazi koriste se za dodelu ili oduzimanje privilegija za pristup bazi podataka. 4

Page 5: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

5

Page 6: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Naredba SELECT Naredba SELECT je jedna od najkompleksnijih naredbi SQL-a.

Uključuje veći broj ključnih reči klauzula:

SELECT - definiše listu kolona koje će biti uključene u rezultujuću tabelu

FROM - definiše tabele iz kojih se pribavljaju podaci za potrebe generisanja rezultujuće tabele. Klauzula FROM može da uključi jednu ili više opcionih JOIN klauzula za povezivanje tabela na osnovu kriterijuma zadatih od strane korisnika.

6

Page 7: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

…Naredba SELECT WHERE - definiše predikat na osnovu koga se ograničava broj

vrsta u rezultujućoj tabeli. Ova klauzula iz rezultata eliminiše sve vrste za koje specificirani predikat ne vraća vrednost TRUE.

GROUP BY - grupiše vrste koje u određenim kolonama imaju identične vrednosti.

HAVING - definiše predikat na osnovu koga se elimišu vrste nakon što je klauzula GROUP BY primenjena na rezultujuću tabelu.

ORDER BY - koristi se za sortiranje rezultujuće tabele. Korisnici specificiraju kolone po kojima se vrši sortiranje kao i smer sortiranja.

7

Page 8: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Klauzule SELECT i FROM

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

Klauzula FROM specificira tabele iz kojih se pribavljaju podaci. Ukoliko se navede više tabela potrebno je specificirati način spajanja tabela.

8

Page 9: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Klauzule SELECT i FROM Klauzula SELECT specificira kolone koje treba uključiti u

rezultujuću tabelu. Mogu se koristiti sledeće opcije:

◦ ALL - u rezultujućoj tabeli prikazuju se sve vrste koje zadovoljavaju navedeni predikat

◦ DISTINCT - iz rezultujuće tabele izbacuju se duplikati vrsta

◦ * - rezultujuća tabela uključuje sve kolone tabele ili tabela iz kojih se pribavljaju podaci

◦ tabela.* - rezultujuća tabela uključuje sve kolone specificirane tabele

◦ izraz - ime kolone ili funkcije nad kolonama koja će biti uključena u rezultujuću tabelu

◦ AS pseudonim - novo ime kolone ili funkcije nad kolonama koje im se dodeljuje u rezultujućoj tabeli

9

Page 10: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Primer 1 SQL upit koji prikazuje kompletan sadržaj tabele RADNIK

SELECT *

FROM RADNIK;

Rezultat bi bio ekvivalentan 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;

10

Page 11: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Primer 2

Ukoliko želimo da prikažemo samo određene kolone iz tabele RADNIK posle SELECT klauzule navodimo imena kolona koje su od interesa.

SQL upit koji prikazuje samo imena i prezimena radnika

SELECT Ime, Prezime FROM RADNIK;

11

Page 12: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Redosled kojim su kolone navedene u klauzuli SELECT definiše redosled kolona u rezultujućoj tabeli.

SQL upit koji prikazuje imena i prezimena svih radnika ali u nešto drugačijem redosledu.

SELECT Prezime, Ime FROM RADNIK;

12

Page 13: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Primer 3

SQL upit koji za svakog radnik određuje matični broj njegovog neposrednog rukovodioca

SELECT Rukovodilac FROM RADNIK;

13

Page 14: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Možemo da primetimo da se u rezultujućoj tabeli neki matični brojevi javljaju više puta. To je posledica činjenice da veći broj radnika može imati istog rukovodioca. Ukoliko želimo da eliminišemo duplikate koristićemo ključnu reč DISTINCT.

SELECT DISTINCT Rukovodilac

FROM RADNIK;

14

Page 15: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Klauzula WHERE Klauzula WHERE zadaje uslov na osnovu koga se kreira

rezultujuća tabela. U rezultujuću tabelu će biti uključene samo one vrste koje zadovoljavaju specificirani uslov. U uslovu se mogu javiti:

Relacioni operatori

Logički operatori

Operator BETWEEN

Operator IN

Operator LIKE

Operator IS NULL

15

Page 16: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Klauzula WHERE SQL podržava šest relacionih operatora koji imaju sledeće

značenje:

1. = Jednako

2. <> Nije jednako (različito)

3. < Manje od

4. > Veće od

5. <= Manje ili jednako od

6. >= Veće ili jednako od

16

Page 17: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Primer 4

SQL upit koji prikazuje podatke o radnicima koji se prezivaju Petrović.

SELECT *

FROM RADNIK

WHERE Prezime = "Petrović";

Treba primetiti da se tekstualni podaci zadaju korišćenjem znaka navoda: "Petrović".

17

Page 18: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Primer 5

Primer sadrži SQL upit koji prikazuje imena i prezimena radnika čija je plata jednaka ili veća od 40000.

SELECT Ime, Prezime

FROM RADNIK

WHERE PLATA >= 40000;

18

Page 19: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Logički operatori SQL omogućava korišćenje standardnih logičkih operatore

AND, OR i NOT, ali i operatore IN i BETWEEN koji omogućavaju jednostavnije korišćenje prethodno navedenih operatora u nekim slučajevima.

Prioritet logičkih operatora je sledeći: NOT

AND

OR

19

Page 20: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Logički operatori Logički operatori AND i OR se koriste na standardni način.

Međutim, kod SQL-a, logički operator negacije NOT se navodi na početku logičkog izraza, a ne ispred operatora poređenja. Na primer, NOT A = B je validni WHERE uslov, ali A NOT = B nije.

Primer 6

Ukolimo želimo da prikažemo podatke o radnicima koji se prezivaju Petrović i čija je plata jednaka ili veća od 40000 koji SQL upit možemo koristiti?

SELECT *

FROM RADNIK

WHERE Prezime = "Petrović" AND Plata >= 40000;

20

Page 21: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Primer 7 U nastavku je dat SQL upit koji prikazuje podatke o

radnicima koji se prezivaju Petrović i čija plata nije jednaka ili veća od 40000.

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

21

Page 22: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

SELECT *

FROM RADNIK

WHERE Prezime = "Petrović" OR Prezime = "Jovanović";

Primer 8 Primer sadrži SQL upit koji prikazuje podatke o radnicima koji se prezivaju Petrović ili se prezivaju Jovanović.

22

Page 23: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Operator IN Operator IN zamenjuje višestruku upotrebu operatora OR i = .

Operator NOT IN prikazuje sve vrste osim onih određenih IN listom.

Primer 9

Korišćenjem operatora IN izdvajaju se samo radnici koji se prezivaju Petrović ili Jovanović.

SELECT *

FROM RADNIK

WHERE Prezime IN ("Petrović","Jovanović");

23

Page 24: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

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

SELECT *

FROM RADNIK

WHERE Prezime NOT IN ("Petrović","Jovanović");

24

Page 25: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Operator BETWEEN Operator BEETWEEN zamenjuje višestruku upotrebu operatora

AND i =. Ovaj operator omogućava 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 (uključujući i granice opsega) možemo iskoristiti operator BETWEEN.

25

Page 26: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

SELECT *

FROM RADNIK

WHERE Plata BETWEEN 30000 AND 40000;

ili bez korišćenja BETWEEN

SELECT *

FROM RADNIK

WHERE Plata>=30000 AND Plata<=40000;

26

Page 27: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Operator LIKE

Operator LIKE omogućava poređenje vrednosti kolone sa zadatim šablonom.

Kod definisanja šablona koristi se procenat (%) i znak pitanja (?). Procenat (%) predstavlja bilo koji mogući znak (broj, slovo, interpunkcijski znak) ili skup znakova. Znak pitanja (?) zamenjuje samo jedan znak.

27

Page 28: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Primer 11

Za zadavanje šablona MS Access koristi nešto drugačije simbole. Umesto procenta koristi se zvezdica (*). U narednom primeru * iza slova "J" označava proizvoljan broj znakova (0 ili više), odnosno predstavlja uzorak za poklapanje koji sadrži na početku slovo "J" i proizvoljan broj znakova iza njega. Za nalaženje svih radnika koji imaju "J" na početku prezimena, može se koristiti šablon "J%".

SELECT *

FROM RADNIK

WHERE Prezime LIKE "J*";

Za nalaženje svih radnika koji sadrže slovo "J" negde u prezimenu mogao bi se koristiti šablon "*J*". Obratite pažnju da se ne pravi razlika između malih i velikih slova.

28

Page 29: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Operator NOT LIKE prikazuje sve vrste koje ne odgovaraju prethodno datom opisu, tj za prethodni slučaj, sve radnike koji nemaju slovo "J" u svom prezimenu.

Operator IS NULL Operator IS NULL se koristi za poređenje sa NULL vrednostima.

Treba voditi računa da se na NULL vrednosti ne može primeniti ni jedan relacioni operator. Može 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 rođenja odnosno datum rođenja ima NULL vrednost.

SELECT * FROM RADNIK WHERE DatRodj IS NULL;

29

Page 30: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Klauzula ORDER BY

Klauzula ORDER BY specificira redosled prikazivanja vrste rezultujuće tabele, sortiranjem po vrednosti nekih kolona u rastući (ASC) (predefinisana vrednost) ili opadajući redosled (DESC). Ukoliko klauzula ODER BY nije navedena vrste u rezultujućoj tabeli su poređane po slučajnom principu i ne postoji nikakva garancija da će isti upit uvek generisati rezultujuću tabelu čije su vrste poređane na isti način.

30

Page 31: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Primer 13

U nastavku je dat SQL upit koji prikazuje podatke o radnicima i sortira ih prema prezimenu u opadajućem i rastućem redosledu.

SELECT *

FROM RADNIK

ORDER BY Prezime;

31

Page 32: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Obratite pažnju da ukoliko vrste sortirate u rastućem redosledu nije potrebno eksplicitno navesti smer sortiranja.

Rastući redosled je podrazumevan u ORDER BY klauzuli.

SELECT *

FROM RADNIK

ORDER BY Prezime DESC;

32

Page 33: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

SELECT *

FROM RADNIK

ORDER BY Sektor DESC, Prezime ASC;

Primer 14 Sortiranje je moguće vršiti na osnovu vrednosti više kolona. SQL upit u nastavku sortira podatke o radnicima prema broju sektora u opadajućem redosledu a prema prezimenu u rastućem redosledu.

33

Page 34: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

SELECT Ime, Prezime, Plata + 5000 AS PlataSaBonusom

FROM RADNIK;

Aritmetičke funkcije SQL dozvoljava korišćenje matematičkih funkcija u SELECT i WHERE klauzulama. Na taj način se kao rezultat pretraživanja mogu prikazati rezultati izračunavanja nekog matematičkog izraza. Primer 15 U nastavku je dat SQL upit koji prikazuje imena i prezimena radnika kao i njihove plate uvećane za bonus od 5000.

34

Page 35: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Aritmetičke funkcije se mogu primenjivati i u WHERE klauzuli. SELECT Ime, Prezime, Plata + 5000 AS PlataSaBonusom FROM RADNIK WHERE Plata + 5000 > 40000;

SELECT Ime, Prezime, Plata + 5000 AS [Plata sa bonusom] FROM RADNIK;

Ukoliko novo ime kolone treba da se sastoji iz više reči onda se piše u

obliku AS [Plata sa bonusom].

Obratite pažnju da je rezultatu

matematičke funkcije (Plata + 5000)

dodeljeno novo ime korišćenjem sintakse

pseudonima: AS PlataSaBonusom.

35

Page 36: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Znakovni operator &

SQL jezik koristi operator & koji omogućuje spajanje dva niza.

Primer 16

SELECT Ime & " " & SSlovo & " " & Prezime AS [Ime i prezime radnika]

FROM RADNIK;

U ovom primeru izvršili smo spajenje imena

i prezimena zaposlenih. Da ne bi došlo do

spajanja reči ubacili smo jedan prazan znak

- blanko ('' '') između reči.

36

Page 37: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

SQL funkcije

37

Page 38: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Funkcije agregacije

Funkcije agregacije su dobile naziv po tome što vrše agregaciju rezultata upita. Korišćenje ovih funkcija je jednostavno, pošto se navode u listi kolona SELECT klauzule koje se prikazuju. Značenje funkcija je sledeće:

AVG(kolona) - izračunava srednju vrednost datog atributa

SUM(kolona) - izračunava sumu svih vrednosti atributa

MIN(kolona) - nalazi minimalnu vrednost atributa

MAX(kolona) - nalazi najveću 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 različitim vrednostima zadate kolone (nije podržano od strane MS Access-a)

38

Page 39: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Primer 17

Funkcija COUNT određuje broj vrsta u rezultujućoj tabeli.

SELECT COUNT(*) AS PlataSaBonusom

FROM RADNIK;

Primer 18 Sledeći SQL upit određuje maksimalnu, minimalnu, prosečnu i ukupnu platu svih radnika. SELECT MAX(Plata) AS MaxPlata, MIN(Plata) AS MinPlata, AVG(Plata) AS ProsPlata, SUM(Plata) AS UkPlata FROM RADNIK;

Zadatak! Modifikovati prethodni upit tako da se prosečna plata prikazuje zaokružena na 2 decimale.

39

Page 40: Upitni jezik SQL - WordPress.com · Većina relacionih baza podataka poput Oracle baze jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina

Primer 18

Posebno je bitno zapamtiti da funkcije agregacije nije moguće koristiti u WHERE klauzuli. To je posledica činjenice da se rezultat funkcija agregacija izračunava nakon što se odrede vrste koje ulaze u sastav rezultujuće tabele, odnosno nakon obrade predikta koji je zadat u WHERE klauzuli. U nastavku je dat SQL upit koji se NE MOŽE IZVRŠITI i koji će GENERISATI GREŠKU.

SELECT Ime, Prezime, Plata

FROM RADNIK

WHERE Plata > AVG(Plata);

Pravilna SQL naredba bi bila

SELECT Ime, Prezime, Plata FROM RADNIK WHERE Plata>(SELECT AVG(Plata) FROM RADNIK);

40