You are on page 1of 6

Uvod u SQL

U prvom modulu ovog kursa kreirali smo jednu bazu podataka sa dve tabele i tom prilikom
smo se prvi put susreli sa jezikom koji se naziva Structured Query Language ili SQL. Tom
prilikom nismo preterano ulazili u samu sintaksu onoga što smo pisali, već nam je cilj bio
samo demonstracija kreiranja baze i tabela u relacionom kontekstu. U ovom modulu
upoznaćemo se sa sintaksom SQL-a i sa mogućnostima ovog jezika.

SQL je jedini jezik baza podataka koji je u širokoj primeni. Još od kako je predstavljen,
ranih 70-ih godina prošlog veka, bio je kritikovan, menjan, proširivan, ali na kraju i
prihvaćen od strane svih relevantnih činilaca na tržištu baza podataka.

SQL je postao standard Američkog Nacionalnog Instituta za standarde (ANSI) 1986. godine i
Internacionale Organizacije za standarde (ISO) 1987. godine. Kao što je već rečeno, do
danas, standard je proširivan novim funkcionalnostima nekoliko puta.

Uprkos standardizaciji, SQL kod različitih sistema za upravljanje bazama podataka nije u
potpunosti kompatibilan, pošto svaki proizvoñač implemetira SQL sa odreñenim
odstupanjima i primenom specifičnih proširenja. Ovaj modul baviće se osnovama MySQL
implementacije SQL standarda.

Zapravo, ukoliko savladate ove osnove na pravi način, bićete u stanju da koristiti bilo koji
sistem za rukovanje bazama podataka.

SQL se primarno koristi za formulisanje instrukcija sistemu baze podataka, koje obuhvataju
naredbe za manipulaciju bazama i podacima.

SQL sintaksa

Već smo, kroz dosadašnje primere, naročito u prethodnom modulu, mogli da vidimo kako
izgleda sintaksa SQL-a. Možemo dodati još neke karakteristike:

• SQL nije osetljiv na velika i mala slova;


• svaki SQL upit (ukoliko ih ima više) mora da se završi oznakom ; (ovaj
separator se može promeniti);
• stringovi se pišu isključivo u navodnicima; MySQL prihvata i jednostruke i
dvostruke navodnike za string, ali je najbolja praksa koristiti jednostruke;
• objekti u SQL-u se mogu staviti u Backtick navodnike (select * from `my
table`);
• promenljive u SQL-u uvek počinju oznakom @.

Tekstualne konstante

String predstavlja sekvencu bajta ili karaktera, koji su ograničeni ili jednostrukim
navodnicima (') ili dvostrukim navodnicima ("). Evo nekih primera stringova:

'a string'
"another string"

Copyright © Link group


Preporučuje se, ipak, da se uvek stringovi označavaju jednostrukim navodnicima, zbog
ANSI_QUOTES moda koji može biti aktiviran na serveru, i po kome se stringovi sa
dvostrukim navodnicima interpretiraju kao identifikatori.

Generalno, postoje dva tipa stringova u MySQL-u i to su binarni stringovi i nebinarni


stringovi, odnosno stringovi koji su sastavljeni od karaktera. Razlika izmeñu ove dve vrste
stringova je u osnovnoj gradivnoj jedinici koja je za binarne stringove, naravno, bajt, dok je
za nebinarne stringove to karakter. Još jedna razlika je veoma bitna, a to je činjenica da se
za binarne stringove ne može definisati set karaktera ili kolacija, s obzirom da se čuvaju kao
sekvenca bajtova.

Odreñena grupa karaktera specijalno se interpretira unutar string konstanti, slično kao i u
drugim programskim jezicima. Pregled svih dostupnih specijalnih karaktera možete videti u
tabeli 8.1.

Escape Sequence Reprezentacija


\0 null ili 0x00
\' jednostruki navodnik
\" dvostruki navodnik
\b backspace
\n newline
\r carriage return
\t tab
\\ backslash
\_ donja crta
\% procenat

Komentari

MySQL server podržava tri vrste komentara:

• jednolinijski komentar, navoñenjem karaktera # (sve od ovog karaktera do


kraja linije smatra se komentarom)

mysql> SELECT 1+1; # This comment continues to the end of


line

• jednolinijski komentar navoñenjem karaktera -- (ovako nešto podržano je od


verzije MySQL 3.23.3)

mysql> SELECT 1+1; -- This comment continues to the end


of line

• višelinijski komentar koji je kreiran na isti način kao i u programskom jeziku


C, korišćenjem karaktera /* i*/ gde sve izmeñu ovih oznaka predstavlja
komentar

mysql> SELECT 1 /* this is an in-line comment */ + 1;


mysql> SELECT 1+
/*
this is a
multiple-line comment

Copyright © Link group


*/
1;

MySQL server poznaje i jednu vrstu specijalnih komentara, koji se nazivaju uslovni
komentari. Njihova sintaksa je sledeća:

/*! MySQL-specific code */

Najbolje je ovo razumeti na primeru. Ukoliko napišemo jedan ovakav uslov:

SELECT /*! STRAIGHT_JOIN */ col1 FROM table1,table2 WHERE ...

MySQL server će izvršiti i deo upita unutar uslovnih komentara, tj. izvršiće i
STRAIGHT_JOIN, dok drugi serveri neće.

Na ovaj način moguće je i navoñenje specifične verzije MySQL servera na koju se odnosi
deo upita izmeñu uslovnih komentara. Ako se napiše nešto ovako:

CREATE /*!32302 TEMPORARY */ TABLE t (a INT);

Deo upita definisan unutar uslovnih komentara izvršiće se samo na MySQL serverima verzije
3.23.02 ili više.

Naredbe

Sve dijalekte SQL jezika karakterišu tri seta naredbi.

• Naredbe za manipulaciju (Data Manipulation Language - DML)

Ovaj set naredbi je srce SQL-a. To su naredbe koje se koriste često i u velikoj količini.
Sigurno nećemo svakog dana kreirati baze podataka (osim ako nismo administrator baze),
niti njihovu strukturu (tabele), korisnike i sl. Ovo je posao koji se obavlja jednom (bar
njegovi ključni delovi). Sa druge strane, manipulaciju podacima, što je predmet naredbi za
manipulaciju, vršimo konstantno.

Naredbe za manipulaciju podacima su SELECT, INSERT, UPDATE i DELETE.

Naredbe za manipulaciju podacima su, u stvari, najkorišćenije naredbe u SQL-u. Ako ste se
ikada susreli sa ovim jezikom (pre ovog kursa), verovatno je bilo baš kroz ovaj set naredbi.

Takoñe, možete se susresti sa termin CRUD koji se odnosi na ove naredbe, tako da se često
za manipulacione naredbe kaže da su to CRUD naredbe ili operacije. CRUD predstavlja
skraćenicu od CREATE, READ, UPDATE, i DELETE.

Ove naredbe demonstriraćemo na primeru Sakila baze podataka, stoga je neophodno da


temeljno proñete prvi modul ovog kursa u kome je dato uputstvo na koji način se ova baza
kreira i popunjava podacima.

Copyright © Link group


Manipulacioni set je malo slobodniji po pitanju prava korisnika. Većini korisnika možemo, na
primer, dozvoliti da listaju redove tabela. Ali, i tu treba biti pažljiv. DELETE, UPDATE, pa i
INSERT naredbe, u pogrešnim rukama, mogu naneti priličnu štetu podacima.

• Naredbe za definiciju (Data Definition Language – DDL)

Sa ovim naredbama već smo se upoznali u okviru prvog modula ovog kursa, kada smo
kreirali prvu bazu podataka. To su naredbe CREATE, ALTER i DROP. Ove naredbe koriste se
za rukovanje objektima na serveru, odnosno svim onim što može da se napravi, izmeni ili
obriše: baze, tabele, uskladištene procedure, pogledi...

Pošto je reč o kreiranju objekata na serveru, ovaj set obično je dostupan samo
administratorima servera (za sve iznad nivoa baze korisnika), tako da, kada korisnik dobije
pravo na korišćenje baze, može da radi većinu stvari unutar te svoje baze, ali nema
mogućnost njenog brisanja ili brisanja ostalih baza servera. Iz istog razloga, običnim
korisnicima nedostupne su i kontrolne komande. Jer, ukoliko bi korisnik imao mogućnost da
rukuje kontrolnim komandama, mogao bi sam sebi da da visoka prava i dovede do
pomenutih intervencija (brisanje sopstvene ili drugih baza na serveru).

Primer definicione naredbe je:

CREATE database my_db;

Ili

create table my_table


(id int primary key auto_increment,
first_name varchar(50),
last_name varchar(50)
);

Često se, u praksi, koristi skraćenica DDL (Data Definition Language). Ukoliko vam neko
traži DDL vaše baze, on zapravo traži skriptu kojom se ta baza kreira. Ukoliko se, na primer,
baza naziva my_db i ima jednu tabelu (dakle, baza iz malopreñašnjeg primera), DDL za tu
bazu će biti takoñe kod iz primera (kreacija baze i kreacija tabele).

• Naredbe za kontrolu (Data Control Language – DCL)

Naredbe za kontrolu koriste se za rukovanje pravima na serveru. To su naredbe GRANT i


REVOKE. Više o ovim naredbama biće u modulu o administriranju baze podataka. Naredba
GRANT dodeljuje a naredba REVOKE oduzima privilegije korisnicima na serveru.

Napomena

Veoma je bitno napomenuti da je za praćenje gradiva ovog modula neophodna baza Sakila,
popunjena podacima. Kompletna procedura za kreiranje ove baze podataka i za dodavanje
podataka opisana je u prvom modulu u lekciji MySQL Workbench.

Baza Sakila će se intenzivno koristiti za testiranje upita za pretragu. Savet je da, ukoliko
niste na adekvatan način kreirali ovu bazu, detaljno proučite gradivo prvog i drugog modula.

Copyright © Link group


Upotreba navodnika u MySQL-u

Potrebno je još na kraju ove lekcije razjasniti i različitu upotrebu navodnika u MySQL-u.
Naime, tri vrste navodnika se mogu koristiti u MySQL, i to su jednostruki, dvostruki i
takozvani backtick navodnici. Pogledajmo za šta se koji navodnici koriste:

• jednostruki navodnici ' koriste se za definisanje stringova; obavezni su prilikom


definisanja stringova; na primer:

'this is string'

• backtick navodnici ` koriste se za definisanje naziva kolona i tabela; nisu


obavezni, osim u situacijama kada je naziv kolone ili tabele neka rezervisana reč
jezika, ili kada pomenuti naziv sadrži prazna mesta; inače, korišćenje
rezervisanih reči za nazive tabela i kolona je najbolje izbegavati; primer:

INSERT INTO `table` (`id`, `col1`, `col2`, `date`) VALUES


(NULL, 'val1', 'val2', '2001-01-01')

• dvostruki navodnici " se mogu koristiti za definisanje stringova, ali samo u


situaciji kada je ANSI_QUOTES mod deaktiviran; ovaj mod je deaktiviran
podrazumevano, ali na nekim serverima može biti i drugačija situacija, zato se
preporučuje definisanje stringova korišćenjem jednostrukih navodnika.

Pitanje

Naredba create spada u koju vrstu komadi?

• manipulacionu
• definicionu
• kontrolnu
• uslovnu

Naredbe za definiciju (Data Definition Language – DDL) su naredbe CREATE, ALTER i DROP.
Ove naredbe koriste se za rukovanje objektima na serveru, odnosno svim onim što može da
se napravi, izmeni ili obriše: baze, tabele, uskladištene procedure, pogledi. Naredba create
je naredba za kreiranje MySQL objekata, pa je, samim tim, to definiciona naredba.

Rezime

• SQL se primarno koristi za formulisanje instrukcija sistemu baze podataka,


koje obuhvataju naredbe za manipulaciju bazama i podacima.
• SQL nije osetljiv na velika i mala slova.
• Svaki SQL upit (ukoliko ih ima više) mora da se završi oznakom ; (ovaj
separator se može promeniti).
• Promenljive u SQL-u uvek počinju oznakom @.
• MySQL server podržava tri vrste komentara.
• Naredbe za manipulaciju podacima su SELECT, INSERT, UPDATE i DELETE.

Copyright © Link group


• Naredbe za definiciju su CREATE, ALTER i DROP; ove naredbe koriste se za
rukovanje objektima na serveru, odnosno svim onim što može da se napravi,
izmeni ili obriše.
• Naredbe za kontrolu koriste se za rukovanje pravima na serveru; to su
naredbe GRANT i REVOKE.

Copyright © Link group

You might also like