Naredba SELECT je najčešće korišćena naredba u SQL-u. Ona omogućava korisnicima baze podataka da pronađu određenu informaciju koju žele iz operativne baze podataka. Pogledajte nekoliko primera.

Naredba koja je dole prikazana pronalazi sve informacije koje su sadržane u tabeli ucenici. Obratite pažnju na to da se zvezdica u SQL-u koristi kao džoker karta. Naredba doslovno znači „Odaberi sve iz tabele ucenici.“

SELECT *
FROM ucenici;

S druge strane, korisnici bi možda želeli da ograniče atribute koji se pretražuju iz baze podataka. Na primer, za osiguranje se traži popis prezimena svih učenika. Sledeća naredba u SQL-u prikazaće samo tu informaciju:

SELECT prezime
FROM ucenici;

Klauzula WHERE može se koristiti da bi se ograničili zapisi koji se traže samo na one koji zadovoljavaju određene uslove. Direktor bi možda želeo da pregleda dosijee svih učenika koji imaju visok prosek. Sledeća naredba prikazuje sve podatke koji se nalaze u tabeli ucenici za zapise koji imaju prosek veći od 4.7:

SELECT *
FROM ucenici
WHERE prosek > 4.7;

Znači:

Pretraživanje i pribavljanje podataka su najĉešće operacije koje korisnici izvršavaju u relacionoj bazi podataka. Za pretraživanje i pribavljanje podataka u SQL-u koristi se naredba SELECT.

Naredba SELECT pribavlja podatke iz jedne tabele ili više povezanih tabela koje se nalaze u relacionoj bazi podataka. U svom osnovnom obliku naredba SELECT ne može ni na koji naĉin da izmeni podatke koji se nalaze u relacionoj bazi podataka.

Naredba SELECT je jedna od najkompleksnijih naredbi SQL programskog jezika. 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.

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.


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. Spajanje tabela će biti detaljno objašnjeno u nekoj od narednih lekcija.

Za sada ćemo se ograniĉiti samo na pribavljanje podataka iz jedne tabele.

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

U nastavku je dat SQL upit koji prikazuje kompletan sadržaj tabele ucenici

 SELECT * FROM ucenici;

Rezultat bi bio isti ako bismo napisali upit kod koga su umesto * navedemo imena svih kolona u tabeli.

Ukoliko želimo da prikažemo samo određene kolone iz tabele ucenici posle SELECT klauzule navešćemo imena kolona koje su od interesa. U nastavku je dat SQL upit koji prikazuje samo imena i prezimena učenika.

SELECT  ime, prezime FROM ucenici;

Redosled kojim su kolone navedene u klauzuli SELECT definiše redosled kolona u rezultujućoj tabeli. U nastavku je dat SQL upit koji prikazuje imena i prezimena svih učenika, ali u drugaĉijem redosledu.

 SELECT prezime, ime FROM ucenici;

Klauzula WHERE

Klauzula WHERE specificira 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:

1.Relacioni operatori

2.Logiĉki operatori

3.Operator BETWEEN

4.Operator IN

5.Operator LIKE

6.Operator IS NULL

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

Primer: U ovom primeru dat je SQL upit koji prikazuje podatke o učenicima koji se prezivaju Petrović.

SELECT * FROM ucenici WHERE prezime = "Petrović";

Primer: Sledeći upit treba da prikaže imena i prezimena učenika koji imaju prosek veći od 4.5:

SELECT ime, prezime
FROM ucenici
WHERE prosek > 4.5;

Logički operatori:

SQL omogućava korišćenje standardnih logičkih operatora AND, OR, NOT, a sem toga i IN, BETWEEN koji omogućavaju jednostavnije korišćenje prethodno navedenih operatora u nekim slučajevima.

Prioritet logičkih operatora je sledeći:

  1. NOT
  2. AND
  3. OR

Logički poeratori AND i OR se koriste na standardan 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 može da stoji nakon reči WHERE kao uslov, alI A NOT = B NE MOŽE!

Primer: Ako želimo da prikažemo podatke o učenicima koji se prezivaju Petrović i čiji je prosek veći od 4, možemo koristiti SQL upit koji je dat u nastavku:

SELECT *
FROM ucenici
WHERE prezime="Petrović" AND prosek > 4 ;

Primer: Sledeći primer je SQL upit koji daje sve učenika koji se prezivaju Petrović i čiji prosek nije veći od 4:

SELECT *
FROM ucenici
WHERE prezime="Petrović" AND NOT prosek > 4 ;

Primer: SQL upit koji prikazuje podatke o učenicima koji se prezivaju Petrović ili Jovanović:

SELECT *
FROM ucenici
WHERE prezime="Petrović" OR prezime = "Jovanović" ;


Operator IN

Operator IN zamenjuje višestruku upotrebu operatora OR i =. Operator NOT IN prikazuje sve vrste osim onih određenih datom listom.

Primer: U sledećem SQL upitu se korišćenjem operatora IN izdvajaju samo učenici koji se prezivaju Petrović ili Jovanović:

SELECT *
FROM ucenici
WHERE prezime IN ("Petrović", "Jovanović" );
Primer: Naredni upit pribavlja podatke o svim učenicima osim onih koji se prezivaju Petrović ili Jovanović:

SELECT *
FROM ucenici
WHERE prezime NOT IN ("Petrović", "Jovanović" );


Operator BETWEEN

Operator BETWEEN zamenjuje višestruku upotrebu operatora AND i =. Ovaj operator omogućava ispitivanje da li je vrednost nekog atributa/kolone u zadatom opsegu.

Primer: Za prikazivanje podataka o učenicima čiji je prosek u opsegu od 1.5 do 5.0 (uključujući i granice opsega) možemo da koristimo operator BETWEEN:

SELECT *
FROM ucenici
WHERE prosek BETWEEN 1.5 AND 5.0 ;


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.

Primer: U sledećem upitu traži se spisak svih učenika čije prezime počinje na slovo P:

SELECT *
FROM ucenici
WHERE prezime LIKE 'P%' ;
Za nalaženje svih učenika koji sadrže slovo "P" negde u prezimenu, mogao bi se koristiti šablon "*P*". Obratite pažnju da se u dosta verzija SQL servera ne pravi razlika između velikih i malih slova.

Operator NOT LIKE prikazuje suprotno - sve vrste koje ne odgovaraju  datom opisu koji sledi nakon toga.

PAŽNJA: U zavisnosti od servera koji se koristi, koriste se različiti znakovi za zamenu : SQL Server koristi % za zamenu više znakova i _ za zamenu jednog znaka, dok MS Access umesto % koristi *, a umesto _ koristi ?

Operator IS NULL

Operator IS NULL se koristi za poređanja 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.

Primer: U nastavku je dat SQL upit koji izdvaja podatke o svim učenicima kojima nije unet datum rođenja, odnosno datum rođenja ima NULL vrednost:

SELECT *
FROM ucenici
WHERE datumRodj IS NULL ;


Klauzula ORDER BY

Klauzula ORDER BY specificira redosled prikazivanja vrste rezultujuće tabele, sortiranjem po vrednostima nekih kolona u rastući (ASC) (predefinisana vrednost) ili opadajući redosled (DESC). Ukoliko klauzula ORDER 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.

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

Primer: - u rastućem redosledu:

SELECT *
FROM ucenici
ORDER BY prezime ;
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.

Primer: -u opadajućem redosledu:

SELECT *
FROM ucenici
ORDER BY prezime DESC;

Sortiranje je moguće vršiti na osnovu vrednosti više kolona.

Primer: SQL upit u nastavku sortira podatke o učenicima prema prezimenu u opadajučem redosledu, a prema imenu u rastućem redosledu:

SELECT *
FROM ucenici
ORDER BY prezime DESC, ime ASC ;


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: U nastavku je dat SQL upit koji prikazuje imena i prezimena učenika kao i njihov prosek uvećan za 0.5 kao bonus

SELECT ime, prezime, prosek + 0.5 AS prosek_sa_bonusom
FROM ucenici ;
Obratite pažnju da je rezultatu matematičke funkcije (prosek+0.5) dodeljeno ime korišćenjem sintakse za pseudonim: AS prosek_sa_bonusom. Taj pseudonim će stajati na vrhu kolone u kojoj se nalazi, u našem slučaju, taj prosek sa bonusom.

Aritmetičke funkcije se mogu primenjivati i u WHERE klauzuli:

Primer:

SELECT ime, prezime, prosek + 0.5 AS prosek_sa_bonusom
FROM ucenici
WHERE prosek + 0.5 < 5.0 ;


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 vrsta sa  NE NULL vrednostima kolone
  • COUNT(DISTINCT kolona) - nalazi broj vrsta sa različitim vrednostima zadate kolone

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

SELECT COUNT(*) AS ime
FROM ucenici ;
Primer: Sledeći SQL upit određuje maksimalni, minimalni i prosečni prosek svih učenika:

SELECT MAX(prosek) AS max_prosek, MIN(prosek) AS min_prosek, 
AVG(prosek) AS prosecan_prosek
FROM ucenici ;

PAŽNJA:

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 šo se odrede vrste koje uaze u sastav rezultujuće tabele, odnosno nakon obrade uslova 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, prosek
FROM ucenici
WHERE prosek > AVG(prosek);
Pravilna SQL naredba bi bila:

SELECT ime, prezime, prosek
FROM ucenici
WHERE prosek > (SELECT AVG(prosek) FROM ucenici);


Pitanja za samostalan rad

SQL upiti:

Pokušajte da rešite niz zadataka koji je dat u nastavku. Za rešavanje koristite bazu podataka koju ćete napraviti sami, kao što smo pravili na časovima vežbi :

Vaša baza ima zadato ime, u bazi napravite samo jednu tabelu: ucenici, u kojoj su kolone rbr, ime, prezime, prosek, datumRodj, ulica, grad, email, ... pomoću INSERT klauzule popunite tabelu sa 10-tak redova u kojima se imaju različite vrednosti.

  1. Napisati SQL upit koji prikazuje kompletan sadržaj tabele ucenici
  2. Napisati SQL upit koji prikazuje imena svih učenika koji su sa prosekom manjim od 1.5
  3. Modifikovati prethodni upit tako da se podaci sortiraju u opadajućem redosledu po gradovima iz kojih su
  4. Napisati SQL upit koji prikazuje imena svih učenika iz Kule
  5. Napisati SQL upit koji prikazuje imena svih učenika iz Kule i čije prezime počinja na P
  6. Napisati SQL upit koji prikazuje imena svih učenika iz Kule sa prosekom većim od 4.5
  7. Napisati SQL upit koji prikazuje prosečnu ocenu svih učenika koji nisu iz Kule
  8. Napisati SQL upit koji prikazuje imena svih učenika koji bilo gde u imenu imaju slovo K.



Last modified: Sunday, 16 February 2020, 4:39 PM