Autor Tema: SQL (Structured Querry Language)  (Pročitano 1757 puta)

Horatio Caine

  • Global Moderator
  • Full Member
  • *****
SQL (Structured Querry Language)
« poslato: Decembar 21, 2013, 12:08:39 pre podne »
Naredbe za rukovanje podacima

SELECT  naredba bira jedan ili više podataka iz jedne ili više tabela. Rezultat je privremena tabela, koja ima svoja polja i vrednosti tih polja. To je virtuelna neimenovana tabela, koja postoji samo u radnoj, operativnoj memoriji.

Rezultati jedne SELECT naredbe mogu se koristiti za neku drugu SELECT naredbu (ugnježdeni upiti).

SELECT [ALL/DISTINCT] lista_atributa1

FROM lista_tabela

[WHERE lista_uslova1]

[GROUP BY lista_atributa2]

[HAVING lista_uslova2]

[ORDER BY lsta_atributa3]


lista_atributa1 definiše kolone čije vrednosti treba izdvojiti, atributi se razdvajaju zarezom

lista_tabela definiše tabele sa kojima se radi u upitu (u kojima se nalaze atributi koji se koriste)

WHERE, HAVING definišu uslove koje podaci treba da zadovolje pri izdvajanju

GROUP BY grupišu izdvojene podatke

ORDER BY sortiraju izdvojene podatke

SELECT-FROM su obavezni deo upita, dok se ostale mogu izostaviti

ORDER BY-GROUP BY

ORDER BY se koristi da prikaže podatke u određenom redosledu (rastućem ili opadajućem). Iza ključne reči ORDER BY treba staviti listu stributa po kojima treba složiti podatke. Iza svakog atributa može se dodati jedna od ključnih reči ASC (Ascedenting)-sortiranje po rastućem redosledu ili DESC (Descedenting)-sortiranje po opadajućem redosledu. Ako se ne stavi ni jedna od ove dve ključne reči podrazumeva se ASC.

1. Prikazati ime i kvalifikaciju radnika u preduzeću sortiranih po prezimenima.

SELECT R.prezime, R.ime, R.kvalifikacija

FROM Radnik R

ORDER BY R.prezime;

Ovde se ne upotrebljava ključna reč ASC jer se podrazumeva. Potrebno je sortirati u rastućem redosledu zato što se u računaru slova prevode pomoću ASCII koda u brojeve. Broj koji odgovara slovu O je veći od broja koji odgovara slovu B, pa ako hoćemo da nam se selektuju prezimena po abecedi A-Z to je isto kao da smo rekli da hoćemo da poređamo brojeve od najmanjeg do najvećeg (odnosno u rastućem redosledu).

2. Prikazati ime, kvalifikaciju i premiju radnika uređene po:

a) kvalifikaciji u opadajućem, po plati u rastućem i po premiji u opadajućem redosledu

SELECT R.prezime, R.ime, R.kvalifikacija, R.premija

FROM Radnik R

ORDER BY R.kvalifikacija DESC, R.plata ASC, R.premija DESC;

b) po plati u rastućem,po kvalifikaciji i premiji u opadajućem redosledu

SELECT R.prezime, R.ime, R.kvalifikacija, R.premija

FROM Radnik R

ORDER BY R.plata ASC, R.kvalifikacija DESC, R.premija DESC;

c) po premiji i kvalifikaciji u opadajućem i po plati u rastućem redosledu

SELECT R.prezime, R.ime, R.kvalifikacija, R.premija

FROM Radnik R

ORDER BY R.premija DESC, R.kvalifikacija DESC, R.plata ASC;

GROUP BY raspoređuje izdvojene podatke tako da oni budu grupisani prema uslovu koji sledi iza GROUP BY.

Postoji sličnost između ORDER BY i GROUP BY, ali one nisu iste, razlika je značajnija kada upiti koriste i agregatne (zbirne) funkcije.

3. SELECT DISTINCT R.kvalifikacija, R.SifraO

FROM Radnik R

GROUP BY R.SifraO;

Ovo je upit koji će izdvojiti sve različite vrste kvalifikacija unutar odeljenja

SELECT-FROM

SELECT  izdvaja samo neke  ili sve atribute iz tabele zapisane iza ključne reči FROM (za izdvajanje svih atributa iza SELECT se upisuje *).

Menja redosled prikaza atributa (redosled atributa u odgovoru na upit je isti kao redosled atributa iza SELECT i ne mora se slagati sa redosledom unutar same tabele).

Korišćenjem ključne reči ALL dobijamo prikaz svih podataka koji zadovoljavaju uslov, pa makar oni bili isti sa nekim drugim skupom podataka (npr. ovde možemo dobiti 3x Jovan Jovanović kao rezultat upita, ako njime tražimo da nam se izlistaju sva imena i prezimena u tabeli Osoba, naravno ona će se razlikovati po JMBG-u ali kako JMBG upitom nije tražen, ova razlika nam nije bitna).

DISTINCT eliminiše iste podatke u rezultatu upita (u prethodnom primeru  rezultat upita bi sadržao  samo jedanput Jovan Jovanović, ako postavimo DISTINCT umesto ALL). DISTINCT se odnosi na celokupnu listu_atributa1.

Ako se ne stavi ni ALL ni DISTINCT podrazumeva se ALL.

WHERE

Služi za postavljanje uslova za izdvajanje podataka i omogućava:

izdvajanje redova koji zadovoljavaju neki uslov
 izdvajanje redova koji zadovoljavaju više uslova (AND)
 izdvajanje redova koji zadovoljavaju bar jedan od navedenih uslova (OR)
 izdvajanje redova koji zadovoljavaju složene uslove (AND i OR kombinacije)
 izdvajanje redova čija je vrednost unutar nekih granica (BETWEEN)
 izdvajanje redova čija vrednost pripada nekoj listi vrednosti (IN)
 izdvajanje redova koji ne zadovoljavaju neke uslove (NOT, IS NOT)
 izdvajanje redova ako neka vrednost postoji (EXISTS)
  izdvajanje redova   koji imaju određenu strukturu (LIKE)
 Uslov se postavlja na sledeći način:

atribut1   operator_upoređivanja(>,<,>=,<=,<>,=)    atribut2

U okviru uslova može biti i više atributa razdvojenih zarezima. Upoređuju se prvi sa prvim,drugi sa drugim… Atributi moraju biti istog ili kompatibilnog tipa.