You are on page 1of 6

OSNOVE SQL JEZIKA

Da bi mogli da napiemo bilo kakav program ili web sajt koji pristupa bazi podataka neophodno je da upoznamo jezik kojim se manipulie podacima baze podataka. U pita-nju je jezik pod nazivom SQL (eng. Structured Query Lan-guage) odnosno struktuiranu jezik za zadavanje upita. Ponegde se SQL akronim interpetira kao i "Standard Query Language" odnosno standardni jezik za zadavanje upita. Kako bilo, SQL jezik je standardni jezik koji je predstavljen ranih 1970-tih i od tada je doiveo nekoliko standardizaci-ja od kojih je poslednja bila 1999, a nakon nje jo nekoliko revizija. Dobra stvar kod standardizacije SQL jezika je to jednom nauen moe biti primenjen na bazama podataka razliitih proizvoaa. Da ne bi sve bilo idealno, u praksi moete raunati da predhodna tvrdnja nije potpuno tana, jer sva-ki proizvoa uvodi nove mogunosti koje manje ili vie odstupaju od standarda.

TIPOVI SQL UPITA


SQL upiti se po svojoj funkciji mogu podeliti na sledee grupe: DML (eng. Data Manipulation Language), jezik za manipulaciju podataka. Ovu grupu emo detaljnije prouiti jer se odnosi na pregled, dodavanje, izmenu i brisanje podataka. DDL (eng. Data Definition Language) pomou koga se kreiraju, menjaju i briu objekti u bazi podataka. Pomou njih moemo kreirati tabele, odrediti nazive i tipove podatka, definisati primarni klju tabele i slino. DCL (eng. Data Control Language) jezik za kontro-lu podataka pomou koga se odreuje koji korisnik ta sme da radi sa podacima. Na primer, moete odreenim korisnicima data pravo da samo pregle-daju podatke, a nekim i da ih menjaju.

(ponoviti strukturu tabele iz baze)


Prikaz podataka Prikaz podataka iz baze se dobija pomou SELECT naredbe. Osnova sintaksna struktura SELECT naredbe je veoma jednostavna: SELECT nazivi kolona FROM naziv tabele Nazivi kolona su razdvojeni zarezom, a posle FROM slubene rei se upisuje ime tabele. Navedena imena kolona moraju postojati u tabeli, u suprotnom dobiemo poruku o greci. SELECT drzava,grad,kontinent,povrsina //ovde se navode originalni nazivi kolona FROM drzave

Data Manipulation Language

Ako elte da prikaete sve kolone iz tabele, moete koristiti doker znak SELECT * FROM drzave U praksi je esto potrebno da se podaci prikau po odreenom redosledu. Redosled moe biti po jednoj ili vie kolona. Ako bi rezultat upita eleli da sloimo po gradu i to od A pa na dalje koristimo ORDER BY klauzulu: SELECT drzava,grad,kontinent,povrsina FROM drzave ORDER BY grad ASC ASC je skraeno od Ascending (rastui niz). Moe se koristiti i DESC Descending, odnosno opadajui niz gde se sortiranje obavlja od veeg ka manjem. Kod veine baza podataka ASC je podrazumevana vrednost i ne mora se eksplicitno navoditi. Napisaemo upit koji e sortirati po dve kolone: prvo po koloni drzava po rastuem, a zatim po koloni grad po opadajuem redosledu. SELECT grad, drzava, kontinent FROM drzave ORDER BY kontinent, drzava DESC

prvo se sortira kontinent po rastuem poretku, a onda drava po opadajuem

USLOVI U UPITIMA
U praktinom radu gotovo nikad nam ne treba prikaz svih podataka iz jedne tabele. U tom smislu, postoje dva termina: vertikalni i horizontalni filter. Vertikalni filter znai da ne prikazujemo sve kolone iz tabele, ve samo one koje nam zaista trebaju. Na primer, elite videti samo ifru i naziv kompanije i nikakve druge podatke. Ovo se implementira jednostavno tako to u SELECT listi navedete samo potrebna polja. Horizontalni filter znai da ne elite da vidite sve slogove (redove) iz tabele. Na primer, elite da vidite samo kupce za zadati grad. Ovo se postie pomou WHERE naredbe u kojoj se definie jedan ili vie kriterijuma koji moraju biti ispunjeni da bi se slog prikazao. WHERE naredba (jo se zove klauzula) je veoma slina if naredbi u programskim jezicima. Mogue je zadati vie kriterijuma koji se meusobno povezuju OR i AND operatorima. Ako elimo da vidimo sve drave Severne Amerike, upit bi izgledao ovako:

SELECT drzava,continent FROM drzave WHERE continent = 'North America'

Sintaksa je jednostavna: posle WHERE klauzule se navodi ime polja (continent), zatim operator (=) i na kraju vred-nost ('North America'). Obratite panju da se vrednost North America nalazi izmeu jednostrukih znakova za navoenje. Poto je polje continent tipa string, sintaksno, kriterijum mora ovako da se pie jer je ceo upit u stvari string dodeljen CommandText svojstvu komande:

komanda.CommandText="SELECT drzava,continent FROM drzave WHERE continent = 'North America' ";


esto se u kombinuju WHERE i ORDER BY klauzula koja slui za sortiranje. U tom sluaju neophodno je ispotovati redosled klauzula u SELECT upitu: SELECT ... FROM ... WHERE ... ORDER BY ...

Na primer: SELECT ContactName, CustomerID, CompanyName, City FROM Customers WHERE City = 'London' OR City = 'Berlin' ORDER BY ContactName Ako elite da prikaete sve podatke osim nekog po zadatom kriterijumu, moete koristiti operator negacije NOT. Na primer elimo videti sve kupce osim onih iz Londona: SELECT CustomerID, CompanyName, City FROM Customers WHERE NOT City = 'London' Postoji jo jedna zgodna skraenica u pisanju. Ako za isto polje postoji vie kriterijuma vezanih sa operatorom OR, moe se koristiti IN operator. Na primer, ako elimo da vidimo sve kupce iz gradova London, Berlin, Madrid i Pariz kriterijum bi se skraeno napisao na sledei nain: SELECT ContactName, CustomerID, CompanyName, City FROM Customers WHERE City IN ('London', 'Berlin', 'Madrid', 'Paris') Kada su polja u kriterijumu numerikog tipa, uslov se pie isto kao i do sada ali ovog puta vrednost kriterijuma je numerika i ne stavlja se u jednostruke znakove navoda. Na primer elimo videti sve slogove ija je povrina vea od 100 000 i da rezultat sortiramo po istom polju: SELECT drzava,grad,povrsina FROM drzave WHERE povrsina > 100 000 ORDER BY povrsina DESC

Slino IN operatoru postoji jo jedan skraeni nain pisanja kriterijuma. Ako elimo da vidimo sve drave iji je broj stanovnika izmeu 5 i 10 miliona (ukljuujui i ove vrednosti) regularno bi napisali:

SELECT drzava,grad,populacija FROM drzave WHERE populacija>= 5 000 000 AND populacija <= 10 000 000

Kriterijum moemo skratiti i to je moda vanije, uiniti itljivijim pomou BETWEEN operatora: SELECT drzava,grad,populacija FROM drzave WHERE populacija BETWEEN 5 000 000 AND 10 000 000 Vodite rauna da korienje BETWEEN operatora uvek ukljuuje i gornju i donju granicu. Korienje horizontalnog i vertikalnog filtera je veoma bitno jer znaajno smanjuje optereenje servera baze podataka i mrene infrastrukture. Imajte u vidu da u praksi nikad nije potrebno gledati sve podatke. Paljivo napisani upiti, gde se prikazuje samo ono to je stvarno potrebno (i po horizontali i po vertikali), mogu znaajno da poboljaju ukupne performanse sistema. Kada elimo da prikaemo slogove koji sadre polja bez unete vrednosti, takvo polje poredimo sa NULL korienjem operatora IS: SELECT drzava,grad,populacija FROM drzave WHERE populacija IS NULL ili suprotno SELECT drzava,grad,populacija FROM drzave WHERE populacija IS NOT NULL

POLJA KOJA SE IZRAUNAVAJU I AGREGATNE FUNKCIJE


Preko upita moemo dodati i kolone koje se ne nalaze u fizikoj bazi, ve ih sami raunamo. Na primer hoemo da na osnovu broja stanovnika i povrsine drave (koji se nalaze u bazi) izraunamo gustinu naseljenosti: SELECT drzava,grad,populacija,povrsina, populacija/povrsina as gustina FROM drzave

Prve 4 kolone se nalaze u fizikoj bazi, dok smo 5. kolonu formirali pomou upita. Mogu se koristiti aritmetike operacije, operacije sa stringovima ili bilo koje druge operacije.

AGREGATNE FUNKCIJE
Kao rezultat ne vraaju zapise iz tabele, ve jedan podatak koji predstavlja rezultat navedene funkcije. To su SUM zbir vrednosti po navedenoj koloni COUNT broj zapisa u koloni AVG prosena vrednost po koloni MAX maksimalna vrednost u koloni MIN minimalna vrednost u koloni SELECT SUM(POVRSINA) AS UKUPNA_POVRSINA FROM DRZAVE WHERE CONTINENT='South America'

You might also like