You are on page 1of 14

SQL JEZIK

CREATE TABLE prije ove naredbe CREATE DATABASE nazivbaze


Sintaksa:
CREATE TABLE naziv_tablice
(

naziv_stupca tip_podatka,
naziv_stupca tip_podatka,
naziv_stupca tip_podatka )
;

Tipovi podataka u SQL-u:


Numericki tipovi
NUMERIC(l,d) ili
DECIMAL(l,d)

broj od l znamenki, od cega d decimala. Predznak i


decimalna tocka se ne broje u l. d moze biti i 0 ili nenapisan i
tada nema decimalne tocke.

SMALLINT, INTEGER

mali (16bitni) ili veliki (32bitni) cijeli brojevi.

FLOAT, REAL ili


DOUBLE PRECISION

mali ili veliki realni brojevi.

Vremenski tipovi
DATE

datum u formatu yyyy:mm:dd

TIME

vrijeme u formatu hh:mm:ss

DATETIME

datum i vrijeme u formatu yyyy-mm-dd hh:mm:ss

TIMESTAMP

trenutni datum i vrijeme u formatu yyyymmddhhmmss

Tekstualni tipovi
CHAR(l)

niz od tocno l znakova (do 255)

VARCHAR(l)

niz od najvise l znakova (do 255)

BLOB ili TEXT

niz od najvise 216-1 znakova

LONGBLOB ili
LONGTEXT

niz od najvise 232-1 znakova

ENUM('s1','s2',...)

string iz unaprijed zadane liste 's1','s2',... (najvise 216-1)

SET('s1','s2',...)

0, 1 ili vise stringova iz unaprijed zadane liste 's1','s2',... (do


64)

INSERT
1

SQL JEZIK
Insert se koristi za dodavanje novih redaka podataka u tablicu. Moemo umetati
podatke na dva naina.
Sintaksa:
INSERT INTO

naziv_tablice
VALUES

(stupac1, stupac2, stupac3 )


(vrijednost1, vrijednost2, vrijednost3)

Ako se dodaje vrijednost svim stupcima u tablici sintaksa moe glasiti:


INSERT INTO

naziv_tablice
VALUES

(vrijednost1, vrijednost2, vrijednost3)

Vrijednosti znakova (char) ili datuma (date) je potrebno pisati pod jednostruke
navodnike (' ').

UPDATE
Koristi se za izmjenu postojecih podataka (redova) u tablici. Sintaksa glasi:
UPDATE naziv_tablice
SET naziv_stupca1 = vrijednost1
naziv_stupca2 = vrijednost2
Mogue koristiti i WHERE klauzulu, ona govori u kojim redcima treba promjeniti
vrijednost, primjer:
UPDATE naziv_tablice
SET

naziv_stupca1 = vrijednost1
naziv_stupca2 = vrijednost2

WHERE naziv_stupca1 = vrijednost1


naziv_stupca2 = vrijednost2

DELETE
Koristi se za brisanje redaka iz tablice. Sintaksa glasi:
DELETE FROM naziv_tablice [WHERE UVJET]
S gore naredbom briemo sve iz tablice, a ako hoemo obrisati samo neki redak
koristimo WHERE klauzulu:
DELETE FROM naziv_tablice
WHERE

naziv_stupca = vrijednost1

SQL JEZIK

SELECT
Koristi se za odabir podataka iz tablica koje moemo prikazati, promjeniti, obrisati
itd.
Sintaksa koritenja:
SELECT naziv_stupca FROM naziv_tablice
[WHERE klauzula definira redove koji se trae]
[GROUP BY koristi se za kombiniranje redova sa srodnim vrijednostima]
[HAVING definira koji se redovi trae, uz GROUP BY se koristi]
[ORDER BY definira koji se stupci koriste za sortiranje rezultata];
Sintaksa SELECT naredbe s WHERE klauzulom:
SELECT naziv_stupca FROM naziv_tablice
WHERE postavljeni_uvjet;

OPERATORI USPOREIVANJA
=

jednako

<>, !=

nije jednako

<

manje od

>

vie od

>=

jednako ili vie od

<=

manje ili jednako od

LOGIKI OPERATORI
OR

Da bi redovi bili izabrani barem jedan mora biti istinit

AND

Da bi redovi bili izabrani svi uvjeti moraju biti istiniti

NOT

Da bi redovi bili izabrani uvjet mora biti laan

Tablica baze detalji_ucenika


ID

Prezime_uce
nika
Peri
Antuni

Godina

Predmet

Sport

100
101

Ime_uceni
ka
Petar
Ante

10
12

Kriket
Nogomet

102
103

Jurica
Miro

Perii
Mirkovi

9
18

Zemljopis
Matematik
a
Zemljopis
Matematik
a

Kriket
Bagminton

SQL JEZIK
104

Ivo

Ivi

15

Gospodarst
vo

ah

Primjeri sa SELECT naredbom


SELECT
SELECT Ime_ucenika FROM detalji_ucenika;
Rezultat:
Ime_uceni
ka
Petar
Ante
Jurica
Miro
Ivo
Primjer SELECT-a s AS uvjetom:
SELECT Ime_ucenika AS Ime FROM detalji_ucenika;
Rezultat:
Ime
Petar
Ante
Jurica
Miro
Ivo
AS je ALIAS i on mijenja naziv stupca prilikom prikazivanja rezultata.
Za prikazivanje cijele tablice koristi se naredba * nakon Select (SELECT * FROM
detalji_ucenika)

WHERE
SELECT Ime_ucenika, Prezime_ucenika FROM detalji_ucenika
WHERE id = 100;
Rezultat:
Ime_ucen
ika
Petar

Prezime_uc
enika
Peri

SQL JEZIK

OR naredba
SELECT Ime_ucenika, Prezime_ucenika, predmet
FROM detalji_ucenika
WHERE predmet = 'Matematika' OR predmet = 'Zemljopis';
Rezultat:
Ime_uceni
ka
Petar
Ante

Prezime_uce
nika
Peri
Antuni

Jurica
Miro

Perii
Mirkovi

Predmet
Zemljopis
Matematik
a
Zemljopis
Matematik
a

AND naredba
SELECT Ime_ucenika, Prezime_ucenika, godina
FROM detalji_ucenika
WHERE godina >=10 AND godina <=15;
Rezultat:
Ime_uceni
ka
Petar
Ante
Ivo

Prezime_uce
nika
Peri
Antuni
Ivi

Godina
10
12
15

NOT naredba
SELECT Ime_ucenika, Prezime_ucenika, sport
FROM detalji_ucenika
WHERE NOT sport = 'nogomet'
Rezultat:
Ime_uceni
ka
Petar
Jurica
Miro

Prezime_uce
nika
Peri
Perii
Mirkovi

Sport
Kriket
Kriket
Bagminton
5

SQL JEZIK
Ivo

Ivi

ah

Primjer zadatka: Ispii Ime, Prezime, godine i sport za uenike koji imaju izmeu
10 i 15 godina i ne igraju nogomet od sportova.
SELECT Ime_ucenika, Prezime_ucenika, godina, sport
FROM detalji_ucenika
WHERE godina >= 10 AND godina <= 15
AND NOT sport = 'Nogomet';
Rezultat:
Ime_uceni
ka
Petar
Ivo

Prezime_uce Godina
nika
Peri
10
Ivi
15

Sport
Kriket
ah

USPOREDNI OPERATORI
LIKE

Vrijednost kolone je slina postavljenom uvjetu

IN
uvjeta

Vrijednost kolone je jednaka bilo kojem od postavljenih

BETWEENAND

Vrijednost kolone je izmeu definiranih vrijednosti,


ukljuujui i zadnju vrijednost

IS NULL

Vrijednost kolone ne postoji

LIKE OPERATOR
SELECT Ime_ucenika, Prezime_ucenika
FROM detalji_ucenika
WHERE Prezime_ucenika LIKE 'P%';
Rezultat:
Ime_uceni
ka
Petar
Jurica

Prezime_uce
nika
Peri
Perii

BETWEEN I AND OPERATOR


6

SQL JEZIK
SELECT Ime_ucenika, Prezime_ucenika, godina
FROM detalji_ucenika
WHERE godina BETWEEN 10 AND 15;
Rezultat:
Ime_uceni
ka
Petar
Ante
Ivo

Prezime_uce
nika
Peri
Antuni
Ivi

Godina
10
12
15

IN OPERATOR
SELECT Ime_ucenika, Prezime_ucenika, predmet
FROM detalji_ucenika
WHERE predmet IN ('Matematika', 'Zemljopis');
Rezultat:
Ime_uceni
ka
Petar
Ante

Prezime_uce
nika
Peri
Antuni

Jurica
Miro

Perii
Mirkovi

Predmet
Zemljopis
Matematik
a
Zemljopis
Matematik
a

SQL JEZIK

Baza podataka Zaposlenik


ID

1
2
3
4
5

Radnik
Sekulic
Antoli
Krznar
Medulin
Petrovi

Odjel
Mehanicar
Elektriar
Nautiar
Elektriar
Informati
ar

Godine
24
28
28
22
25

Placa
2500
3500
3500
2000
3000

Mjesto
Split
Split
Zagreb
Split
Osijek

ORDER BY KLAUZULA
SELECT Radnik, Placa FROM Zaposlenik
ORDER BY Placa;
Rezultat:

Radnik
Medulin
Sekulic
Petrovi
Antoli
Krznar

Placa
2000
2500
3000
3500
3500

Stupac u ORDER BY mora biti jedan od stupaca u SELECT dijelu naredbe.


Automatski se rezultati prikazuju uzlazno, ako hoemo silazno na kraju stavimo
DESC.

COUNT KLAUZULA
SELECT COUNT (naziv_stupca)

(* je da odaberemo sve)

FROM Zaposlenik;

SELECT COUNT (*)


FROM Zaposlenik;
Rezultat bi bio COUNT (*) 5 , dakle vratio bi broj redaka koji se nalaze u tablici
Zaposlenik.
SELECT COUNT (*)
FROM Zaposlenik
WHERE Odjel = Elektriar;
Rezultat bi bio COUNT (*) 2 jer postoje dva reda koji u stupcu odjel imaju
Elektriar.

SQL JEZIK
COUNT slui za prebrojavanje redaka unutar tablice, dobro nam moe posluiti
ako hoemo provjeriti gdje imamo prazne vrijednosti jer ne prikazuje vrijednost
ako je nema (NULL).
SELECT COUNT (DISTINCT Mjesto) FROM Zaposlenik
Rezultat:

Mjesto
Zagreb
Split
Osijek
Ako prikaemo COUNT s * nee se prikazat kolone, a ako stavimo neku kolonu kod
COUNT onda e se rezultat prikazati s tom kolonom kao u primjeru gore.

DISTINCT KLAUZULA
Koristi se za odabir razliitih redaka, npr. Ako hoemo odabrati sve razliite
vrijednosti unutar stupaca.
SELECT DISTINCT Odjel FROM Zaposlenik;
Rezultat:

Odjel
Mehanicar
Nautiar
Informati
ar
MAX KLAUZULA
Koristimo da dobijemo maksimalne vrijednosti iz kolona.
SELECT MAX (Placa)
FROM Zaposlenik;
Rezultati:

Placa
3500
Dobili smo najveu plau kao rezultat.

MIN KLAUZULA
Koristimo da dobijemo minimalne vrijednosti iz kolona.
SELECT MIN (Placa)
FROM Zaposlenik;
Rezultati:
9

SQL JEZIK

Placa
2000
AVG KLAUZULA
Koristimo da dobijemo prosjenu vrijednosti iz kolona.
SELECT AVG (Placa)
FROM Zaposlenik;
Rezultati:

Placa
2900
SUM KLAUZULA
Koristimo da dobijemo zbroj vrijednosti iz kolona.
SELECT SUM (Placa)
FROM Zaposlenik;
Rezultati:

Placa
145000
GROUP BY KLAUZULA
Koristi se za dohvat podataka prema jednom ili vie stupaca.
SELECT Odjel, SUM (Placa)
FROM Zaposlenik
GROUP BY Odjel;
Rezultat:

Odjel
Elektriar
Informati
ar
Mehanicar
Nautiar

Placa
5500
3000
2500
3500

Ovako dobijemo ukupnu plau po odjelima grupiranu po odjelima (abecedno).

10

SQL JEZIK

SELECT Mjesto, Odjel, SUM (Placa)


FROM Zaposlenik
GROUP BY Mjesto, Odjel;
Rezultat:

Odjel
Informati
ar
Elektriar
Mehanicar
Nautiar

Placa
3000

Mjesto
Osijek

5500
2500
3500

Split
Split
Zagreb

Izabrali smo Mjesto, Odjel i sumu Place i to smo grupirali po Mjestu pa Odjelu.
Vidimo da se grupira po Mjestu abecedno, a tamo gdje je isto mjesto je grupirano
abecedno po Odjelu.

!!!! Kod svakog MIN, MAX, COUNT, DISTINCT, SUM, AVG stupac
koji je u zagradi ( se prikazuje u rezultatu. Primjer, SUM (Placa),
COUNT (Odjel), DISTINCT (Radnik0) !!!!

11

SQL JEZIK

Naredbe pridruivanja
SQL naredba JOIN kombinira zapise iz dvije tablice pomou vrijednosti atributa
koje su im zajednike. Rezultat tog kombiniranja je nova, privremena tablica, tzv.
joined table. Osnovni tipovi JOIN naredbe su INNER JOIN i OUTER JOIN (OUTER
JOIN se dijeli na LEFT JOIN RIGHT JOIN).
Podjela: INNER JOIN, LEFT JOIN, RIGHT JOIN.
Zajednike vrijednosti atributa pomou kojih kombiniramo tablice su klju jedne
tablice koji je strani klju u drugoj tablici koju kombiniramo.

Tablica Zaposlenici
ID_zaposlenika
0111
0112
0113
0114

Ime
Jura Juric
Pero Peric
Stef Stefic
Pajo Patak

Tablica Narudzbe
ID_proizvoda
234
657
865

Proizvod
Printer
Stol
Stolica

ID_zaposlenika
0111
0113
0113

INNER JOIN
Sintaksa:
SELECT naziv_stupca1, naziv_stupca2, naziv_stupca3
FROM prva_tablica INNER JOIN druga_tablica
ON kljuc_prve_tablice = strani_kljuc_druge_tablice;

Primjer: Koji zaposlenici su narucili uredski materijal i sto su narucili?


SELECT Ime,Proizvod
FROM Zaposlenici INNER JOIN Narudzbe
ON Zaposlenici.ID_zaposlenika=Narudzbe.ID_zaposlenika;

Rezultat:
Ime
Jura Juric
Stef Stefic
Stef Stefic

Proizvod
Printer
Stol
Stolica
12

SQL JEZIK
INNER JOIN ispisuje sve retke obje tablice u kojima smo pronali "match" (tj. koje
smo uspjeli povezati istom vrijednosti atributa). Ostale retke ne ispisuje.

LEFT JOIN:
Sintaksa:
SELECT naziv_stupca1, naziv_stupca2, naziv_stupca3
FROM prva_tablica LEFT JOIN druga_tablica
ON kljuc_prve_tablice = strani_kljuc_druge_tablice;
Primjer: Ispiite sve zaposlenike, i ako su neto naruili, onda i njihove narudzbe.
SELECT Ime,Proizvod
FROM Zaposlenici LEFT JOIN Narudzba
ON Zaposlenici.ID_zaposlenika=Narudzbe.ID_zaposlenika;

Rezultat:
Ime
Jura Juric
Pero Peric
Stef Stefic
Stef Stefic
Pajo Patak

Proizvod
Printer
Stol
Stolica

LEFT JOIN ispisuje sve retke kao i INNER JOIN te jos dodatne retke (sve preostale
retke) iz prve tablice, koji nemaju "matcheve" s drugom tablicom.

13

SQL JEZIK

RIGHT JOIN:
Sintaksa:
SELECT naziv_stupca1, naziv_stupca2, naziv_stupca3
FROM prva_tablica RIGHT JOIN druga_tablica
ON klju_prve_tablice = strani_kljuc_druge_tablice;

Primjer: Ispiite popis svih narudzbi i tko ih je naruio (ako narucioc postoji).
SELECT Ime,Proizvod
FROM Zaposlenik RIGHT JOIN Narudjba
ON Zaposlenici.ID_zaposlenika=Narudzbe.ID_zaposlenika;

Rezultat:
Ime
Jura Juric
Stef Stefic
Stef Stefic

Proizvod
Printer
Stol
Stolica

RIGHT JOIN ispisuje sve retke kao i INNER JOIN te jo dodatne retke (sve preostale
retke) iz druge tablice, koji nemaju "matcheve" s prvom tablicom. Dakle, da je
postojao neki proizvod kojeg nitko nije naruio, i on bi bio ispisan.

14