103
Ak.god. 2014/2015. BAZE PODATAKA 1 BAZE PODATAKA FAKULTET STROJARSTVA I RAĈUNARSTVA SVEUĈILIŠTE U MOSTARU Doc.dr.sc. GORAN KRALJEVIĆ

BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

  • Upload
    others

  • View
    16

  • Download
    0

Embed Size (px)

Citation preview

Page 1: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 1

BAZE PODATAKA

FAKULTET STROJARSTVA I RAĈUNARSTVA

SVEUĈILIŠTE U MOSTARU

Doc.dr.sc. GORAN KRALJEVIĆ

Page 2: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 2

Web:

http://www.fsr.ba/~goran

Pitanja, primjedbe, dogovor za konzultacije ...

o E-mail: [email protected]

[email protected]

Baze podataka

Page 3: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 3

Uvod u SQL

Page 4: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 4

SQL

• SQL = Structured Query Language

• SQL je upitni jezik temeljen na relacijskoj algebri i predikatnom računu.

• SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može se ugrađivati u jezike treće i četvrte generacije.

• Zadaća SQL-a je omogućiti definiciju podataka, upravljanje podacima i provođenje kontrole nad podacima u relacijskoj bazi podataka.

• Proizvođači komercijalnih sustava također ugrađuju i svoje, uglavnom nestandardne, DDL i DML naredbe.

Ti su nestandardni dijelovi problematični jer programski kod postaje neprenosiv između različitih SQL sustava, a također se bitno otežava usaglašavanje oko budućih standarda.

Page 5: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 5

SQL

• DDL (Data Definition Language)

= izrazi za definiranje podataka

CREATE, ALTER, DROP, GRANT, REVOKE ...

• DML (Data Manipulation Language)

= izrazi za upravljanje podacima

SELECT, INSERT, UPDATE, DELETE ...

Page 6: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 6

SQL

• Primjer SQL naredbe iz DDL dijela jezika (kreiranje tablice mjesto):

CREATE TABLE mjesto

( pbr_mjesta VARCHAR2(5) NOT NULL ,

naziv_mjesta VARCHAR2(30) NOT NULL ,

sifra_opcine NUMBER(4)

);

• Primjer SQL naredbe iz DML dijela jezika (iz tablice mjesto dohvaća sve

n-torke kojima je vrijednost atributa poštanski broj jednaka 88000):

SELECT *

FROM mjesto

WHERE pbr = 88000;

Page 7: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 7

Izvršavanje SQL iskaza (ORACLE server)

Page 8: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 8

DDL naredbe Kreiranje tablica

Page 9: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 9

Kreiranje tablica

Page 10: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 10

SQL – Kreiranje i brisanje tablica

Kreiranje tablice:

CREATE TABLE ime_tablice

(ime_stupca tip (veličina) (ograničenje),

ime_stupca tip (veličina) (ograničenje),

ime_stupca tip (veličina) (ograničenje),

...);

Brisanje tablice:

DROP TABLE ime_tablice;

Page 11: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 11

Ograniĉenja nad stupcima tablice i nad tablicama ...

• NULL/NOT NULL

• UNIQUE

• PRIMARY KEY

• FOREIGN KEY

• CHECK

Page 12: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 12

Tipovi podataka (ORACLE)

• VARCHAR2(size)

• CHAR[(size)]

• NUMBER[(p,s)]

• DATE

Page 13: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 13

Tipovi podataka Veliki objekti

Page 14: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 14

PRIMJER – Relacijski model

Page 15: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 15

SQL – Kreiranje tablica

CREATE TABLE MJESTO

( PBR NUMBER(10) NOT NULL,

NAZIV VARCHAR2(40) NOT NULL,

CONSTRAINT mjesto_pk PRIMARY KEY(PBR)

);

Page 16: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 16

SQL – Kreiranje tablica

CREATE TABLE OSOBA

( MBR NUMBER(10) NOT NULL,

IME VARCHAR2(25) NOT NULL,

PREZIME VARCHAR2(25) NOT NULL,

EMAIL VARCHAR2(40),

PBR NUMBER(10) NOT NULL,

CONSTRAINT osoba_pk PRIMARY KEY(MBR),

CONSTRAINT osoba_mjesto_fk FOREIGN KEY(PBR)

REFERENCES MJESTO(PBR)

);

Page 17: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 17

SQL – Izmjena definicije tablice

ALTER TABLE

dodavanje novih atributa

modificiranje postojećih atributa

definiranje default-ne vrijednosti za novi atribut

brisanje atributa

Page 18: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 18

SQL – ALTER TABLE

Primjeri:

ALTER TABLE osoba

DROP COLUMN email;

ALTER TABLE osoba

ADD (email VARCHAR2(25));

ALTER TABLE mjesto

MODIFY (naziv VARCHAR2(50));

Page 19: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 19

DML naredbe SELECT, INSERT, UPDATE, DELETE

Page 20: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 20

Najĉešće korišteni DML izrazi

SELECT - Pretraţivanje podataka

INSERT - Upisivanje novih podataka

UPDATE - Promjena vrijednosti podataka

DELETE - Brisanje postojećih podataka

Page 21: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 21

INSERT – Unos podataka u tablicu

• INSERT INTO ime_tablice (stupac, stupac,…) VALUES (vrijednost, vrijednost, …);

Primjeri:

• INSERT INTO osoba (mbr, ime, prezime, email)

VALUES (1, 'Ivo', 'Ivic', '[email protected]');

• INSERT INTO osoba

VALUES (1, 'Ivo', 'Ivic', '[email protected]');

Page 22: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 22

INSERT – Unos podataka u tablicu

• INSERT se može koristiti i za kopiranje podataka

iz druge tablice.

Primjer:

• INSERT INTO osoba_2 (mbr, ime, prezime, email)

SELECT mbr, ime, prezime, email

FROM osoba;

Page 23: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 23

UPDATE – Aţuriranje podataka u tablici

• UPDATE ime_tablice [alias] SET

stupac [,stupac…] = {iskaz, podupit}

[WHERE uvjet];

Primjer:

• UPDATE osoba SET email='[email protected]'

WHERE mbr=1;

Page 24: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 24

DELETE – Brisanje podataka u tablici

• DELETE FROM ime_tablice

[WHERE uvjet];

Primjer:

• DELETE FROM osoba

WHERE mbr=2;

Page 25: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 25

SELECT – Selektiranje podataka iz tablice

• SELECT stupac, stupac, stupac, …

FROM ime_tablice

[WHERE uvjet];

Primjeri:

• SELECT mbr, ime, prezime, email

FROM osoba;

• SELECT * FROM osoba;

Page 26: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 26

INSERT – Primjeri

• INSERT INTO mjesto (pbr, naziv)

VALUES (88000, 'Mostar');

• INSERT INTO mjesto (pbr, naziv)

VALUES (88220, 'Široki Brijeg');

• INSERT INTO osoba (mbr, ime, prezime, email, pbr) VALUES (1, 'Ivo', 'Ivic', '[email protected]', 88000);

• INSERT INTO osoba (mbr, ime, prezime, pbr) VALUES (2, 'Mate', 'Matic', 88220);

Page 27: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 27

INSERT – Primjeri

• INSERT INTO osoba (mbr, ime, prezime, email, pbr) VALUES (2, 'Pero', 'Peric', '[email protected]', 88000);

→ ORA-00001: unique constraint (PC-1.OSOBA_PK) violated

• INSERT INTO osoba (mbr, ime, prezime, email, pbr) VALUES (3, 'Pero', 'Peric', '[email protected]', 90000);

→ ORA-02291: integrity constraint (PC-1.OSOBA_MJESTO_FK) violated - parent key not found

• INSERT INTO osoba (mbr, ime, email, pbr) VALUES (3, 'Pero', '[email protected]', 88000);

→ ORA-01400: cannot insert NULL into ("OSOBA"."PREZIME")

Page 28: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 28

UPDATE – Primjeri

• UPDATE mjesto SET pbr=10000

WHERE naziv='Mostar';

→ ORA-02292: integrity constraint (PC-1.OSOBA_MJESTO_FK) violated - child record found

• UPDATE mjesto SET naziv='Š.Brijeg'

WHERE pbr=88220;

• UPDATE osoba SET email='[email protected]'

WHERE mbr=2;

Page 29: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 29

DELETE – Primjeri

• DELETE FROM mjesto

WHERE pbr=88000;

→ ORA-02292: integrity constraint (PC-1.OSOBA_MJESTO_FK) violated - child record found

• DELETE FROM osoba

WHERE mbr=1;

• DELETE FROM mjesto

WHERE pbr=88000;

Page 30: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 30

S Q L

Page 31: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 31

Testna baza (Oracle DBMS) (Baza je napunjena testnim podacima - koristiti ćemo je na vjeţbama za SELECT upite ...)

Page 32: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 32

SELECT – Odabir podataka iz tablice

• SELECT stupci [alias]

FROM ime_tablice [alias]

[WHERE uvjeti za redak]

[GROUP BY stupci]

[HAVING uvjeti za grupu redaka]

[ORDER BY stupci];

Primjer – odabir svih podataka iz tablice djelatnik

• SELECT * FROM djelatnik;

Page 33: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 33

Operatori usporedbe, Logiĉki i SQL operatori

=, >, <, >=, <=, <>

BETWEEN … AND… – između dvije vrijednosti (uključivo)

IN (lista) – odgovara bilo kojoj vrijednosti iz liste

LIKE – odgovara znakovnom “uzorku”

IS NULL – je NULL vrijednost

AND – vraća TRUE ako su svi uvjeti TRUE

OR – vraća TRUE ako je jedan od uvjeta TRUE

NOT – logičko NE

Page 34: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 34

Primjeri

• SELECT id_djelatnika, ime, prezime, placa

FROM djelatnik

WHERE placa > 1000

AND sifra_radmj='IT-PROG';

• SELECT id_djelatnika, ime, prezime, placa

FROM djelatnik

WHERE placa BETWEEN 1000 AND 2000;

Page 35: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 35

Primjeri

• SELECT id_djelatnika, ime, prezime, placa

FROM djelatnik

WHERE ime LIKE 'A%';

• SELECT id_djelatnika, ime, prezime, placa

FROM djelatnik

WHERE ime LIKE '_a%';

Page 36: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 36

Primjeri

• SELECT id_djelatnika, ime, prezime, placa

FROM djelatnik

WHERE placa IN (1000, 2000);

• SELECT id_djelatnika, ime, prezime, placa

FROM djelatnik

WHERE placa NOT IN (1000, 2000);

Page 37: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 37

Primjeri

• SELECT id_djelatnika, ime, prezime, placa, email

FROM djelatnik

WHERE email IS NULL;

• SELECT id_djelatnika, ime, prezime, placa, dodatak

FROM djelatnik

WHERE dodatak IS NOT NULL

AND dodatak <> 100;

Page 38: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 38

Primjeri

• SELECT id_djelatnika, ime, prezime, placa

FROM djelatnik

WHERE placa < 1000

OR placa > 2000;

• SELECT id_djelatnika, ime, prezime, sifra_radmj

FROM djelatnik

WHERE sifra_radmj = 'IT-PROG'

OR sifra_radmj = 'IT-ADM';

Page 39: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 39

Primjeri

Obratiti pozornost – razlikovati sljedeća 2 upita !

• SELECT id_djelatnika, ime, prezime, sifra_radmj, placa

FROM djelatnik

WHERE placa > 1300

AND sifra_radmj = 'IT-PROG'

OR sifra_radmj = 'IT-ADM';

• SELECT id_djelatnika, ime, prezime, sifra_radmj, placa

FROM djelatnik

WHERE placa > 1300

AND ( sifra_radmj = 'IT-PROG'

OR sifra_radmj = 'IT-ADM' );

Page 40: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 40

Agregatne funkcije SQL-a

• ISO standard definira 5 agregatnih funkcija:

o COUNT

o SUM

o AVG

o MIN

o MAX

• Ove funkcije se izvršavaju nad jednim stupcem tablice i vraćaju jednu vrijednost.

• VAŢNO ! Agregatne funkcije se mogu koristiti samo

u SELECT listi i HAVING iskazu.

Page 41: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 41

Agregatne funkcije SQL-a – Primjeri

• SELECT SUM(placa), AVG(placa), MIN(placa), MAX(placa)

FROM djelatnik;

• SELECT COUNT(*) broj_djelatnika

FROM djelatnik;

• SELECT COUNT (DISTINCT sifra_radmj)

FROM djelatnik;

DISTINCT – eliminira duple vrijednosti

Nema efekta na funkcije MIN i MAX, ali ima na SUM i AVG. Može

se navesti samo jedanput u upitu.

Page 42: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 42

Agregatne funkcije SQL-a – Primjeri

• SELECT ime, prezime

FROM djelatnik

WHERE placa > AVG(placa);

→ ORA-00934: group function is not allowed here

• SELECT ime, prezime, SUM(placa)

FROM djelatnik;

→ ORA-00937: not a single-group group function

Page 43: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 43

GROUP BY

• Grupiranje se obavlja tako da se n-torke koje imaju jednake vrijednosti atributa navedenih u listi za grupiranje, kombiniraju u zajedničku grupu. Za svaku dobivenu grupu, u rezultatu se pojavljuje samo jedna n-torka.

• Grupiranje je vrlo korisno u kombinaciji s agregatnim funkcijama (COUNT, SUM, AVG, MIN, MAX).

Primjer:

• SELECT sifra_radmj, AVG(placa) prosjecna_placa

FROM djelatnik

GROUP BY sifra_radmj;

Page 44: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 44

GROUP BY

• P R A V I L O !

Bilo koji atribut ili izraz u SELECT listi koji

nije agregatna funkcija mora biti i u GROUP BY iskazu.

Međutim, dopušteno je u GROUP BY iskazu koristiti i one atribute koji se ne nalaze u SELECT listi.

Page 45: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 45

GROUP BY – Primjeri

• SELECT sifra_radmj, AVG(placa) prosj_placa

FROM djelatnik

GROUP BY sifra_radmj;

• SELECT AVG(placa)

FROM djelatnik

GROUP BY sifra_radmj;

Page 46: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 46

GROUP BY – Primjeri

• SELECT sifra_radmj, spol, AVG(placa)

FROM djelatnik

GROUP BY sifra_radmj;

→ ORA-00979: not a GROUP BY expression

• SELECT sifra_radmj, spol, AVG(placa)

FROM djelatnik

GROUP BY sifra_radmj, spol;

Page 47: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 47

GROUP BY – Primjeri

• SELECT AVG(COUNT(*)) prosjek_djel_rm

FROM djelatnik

GROUP BY sifra_radmj;

• SELECT MAX(COUNT(*)) max_djel_rm

FROM djelatnik

GROUP BY sifra_radmj;

Page 48: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 48

HAVING

• Koristi se ako se ţeli specificirati koje grupe treba prikazati, odnosno, koristi se za restrikciju grupa koje se prikazuju, tj. za ispitivanje vrijednosti agregatnih funkcija.

• VAŢNO ! WHERE iskaz se ne moţe koristiti za

restrikciju grupa (kao HAVING).

WHERE se koristi samo za restrikciju pojedinaĉnih redaka.

Page 49: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 49

HAVING – Primjeri

• SELECT sifra_radmj radno_mjesto, AVG(placa) prosj_placa

FROM djelatnik

GROUP BY sifra_radmj

HAVING AVG(placa)>1500;

• SELECT sifra_opcine, COUNT(*) broj_dj

FROM djelatnik

GROUP BY sifra_opcine

HAVING COUNT(*)>=3;

Page 50: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 50

ORDER BY

• ASC – uzlazno sortiranje (po default-u)

• DESC – silazno sortiranje

→ ORDER BY iskaz dolazi na kraju SELECT upita.

Primjer:

• SELECT ime, prezime, placa

FROM djelatnik

ORDER BY placa DESC;

Page 51: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 51

Izvršavanje SQL iskaza ...

• SELECT sifra_radmj, COUNT(*) broj_djelatnika

FROM djelatnik

WHERE placa>1000

GROUP BY sifra_radmj

HAVING COUNT(*)>2

ORDER BY 2 desc;

• Pregled radnih mjesta na kojima radi više od 2 djelatnika s plaćom većom od 1000 KM.

Page 52: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 52

Izvršavanje SQL iskaza ...

• Pregled radnih mjesta na kojima radi više od 2 djelatnika s plaćom većom od 1000 KM.

ID_DJELATNIKA SIFRA_RADMJ PLACA

1 DIR 4800

2 TAJNIK 1100

100 IT-VOD 2500

101 IT-PROG 1600

102 IT-ADM 1400

103 IT-PROG 1800

104 IT-PROG 1500

105 IT-PROG 1500

106 IT-ADM 1300

107 IT-PROG 1250

108 IT-PROG 1200

109 IT-PROG 1000

110 IT-PROG 800

111 IT-PROG 900

112 IT-ADM 700

113 IT-PROG 1100

114 IT-PROG 950

115 IT-PROG 1350

200 PROD-VOD 2000

201 PROD-KAM 1000

202 PROD-KAM 1400

203 PROD-KAM 1100

204 PROD-KAM 1200

... ... ...

WHERE placa > 1000

1. 2.

ID_DJELATNIKA SIFRA_RADMJ PLACA

1 DIR 4800

2 TAJNIK 1100

100 IT-VOD 2500

101 IT-PROG 1600

102 IT-ADM 1400

103 IT-PROG 1800

104 IT-PROG 1500

105 IT-PROG 1500

106 IT-ADM 1300

107 IT-PROG 1250

108 IT-PROG 1200

113 IT-PROG 1100

115 IT-PROG 1350

200 PROD-VOD 2000

202 PROD-KAM 1400

203 PROD-KAM 1100

204 PROD-KAM 1200

... ... ...

GROUP BY sifra_radmj

Page 53: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 53

Izvršavanje SQL iskaza ...

SIFRA_RADMJ COUNT(*)

PROD-KAM 3

IT-ADM 2

IT-PROG 8

...

GROUP BY sifra_radmj

HAVING COUNT(*)>2

ORDER BY 2 desc

2. 3.

4.

• Pregled radnih mjesta na kojima radi više od 2 djelatnika s plaćom većom od 1000 KM.

SIFRA_RADMJ COUNT(*)

PROD-KAM 3

IT-PROG 8

SIFRA_RADMJ COUNT(*)

IT-PROG 8

PROD-KAM 3

Page 54: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 54

WHERE – GROUP BY – HAVING

• WHERE dio naredbe određuje koje n-torke će

formirati grupe.

• GROUP BY lista određuje strukturu grupa tj. po

kojim atributima se obavlja grupiranje n-torki.

• HAVING dio naredbe određuje koje od nastalih

grupa će biti prihvaćene kao rezultat.

Page 55: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 55

DML naredbe Funkcije

Page 56: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 56

Funkcije (ORACLE)

• CHARACTER funkcije

- LOWER, UPPER, INITCAP, CONCAT, LPAD, RPAD, SUBSTR, INSTR, LTRIM, RTRIM, LENGTH, TRANSLATE, REPLACE

• NUMBER funkcije

- ROUND, TRUNC, SIGN, SQRT, ABS, MOD

Matematičke (LOG, SIN, TAN, COS, EXP)

• DATE funkcije

- ADD_MONTHS, MONTHS_BETWEEN, NEXT_DAY, LAST_DAY, ROUND, TRUNC

• Funkcije za konverziju podataka

- TO_CHAR

- TO_NUMBER

- TO_DATE

Page 57: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 57

Funkcije – Primjeri

Pr.) CHARACTER funkcije

• SELECT ime || ' ' || prezime NAZIV, spol, placa

FROM djelatnik

WHERE UPPER (prezime)='IVIĆ';

• SELECT ime, LENGTH (ime), SUBSTR (ime,1,3)

FROM djelatnik;

Page 58: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 58

Pr.) NUMBER funkcije

• SELECT sifra_radmj, ROUND (AVG(placa),2)

FROM djelatnik

GROUP BY sifra_radmj

HAVING ROUND(AVG(placa),2)>1200

ORDER BY 2 desc;

Funkcije – Primjeri

Page 59: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 59

Pr.) DATE funkcije

• SELECT id_djelatnika, ime, prezime, placa,

TO_CHAR (datum_zaposlenja, 'dd.mm.yyyy') ZAPOSLEN,

MONTHS_BETWEEN(SYSDATE, datum_zaposlenja)/12 STAZ

FROM djelatnik;

Funkcije – Primjeri

Page 60: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 60

NULL vrijednost u izrazima

• Ukoliko vršimo neku od aritmetičkih operacija (+, -, *, /), a jedan ili oba operanda poprimaju NULL vrijednost, tada je rezultat izraza također NULL vrijednost.

• Primjeri:

o 3 + NULL = NULL

o NULL – NULL = NULL

o NULL * 2 = NULL

• Obratiti pozornost ! NULL i nula (0) nisu isto.

Page 61: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 61

NVL funkcija

• SELECT id_djelatnika, ime, prezime, placa, dodatak,

placa+dodatak UKUPNA_PLACA

FROM djelatnik;

• SELECT id_djelatnika, ime, prezime, placa, dodatak,

placa+NVL(dodatak,0) UKUPNA_PLACA

FROM djelatnik;

Page 62: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 62

IF-THEN-ELSE

• IF-THEN-ELSE logika u SQL upitima se može realizirati korištenjem:

o CASE izraza

o DECODE funkcije (Oracle)

Page 63: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 63

CASE, DECODE – Primjeri

Primjer:

• SELECT ime, prezime, spol,

CASE spol

WHEN 'M' THEN 'Muško'

WHEN 'Ţ' THEN 'Ţensko'

ELSE '???'

END

FROM djelatnik;

• SELECT ime, prezime, spol,

DECODE ( spol, 'M', 'Muško', 'Ţ', 'Ţensko', '???')

FROM djelatnik;

Page 64: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 64

CASE, DECODE – Primjeri

Primjer:

• SELECT ime, prezime, spol, placa,

CASE spol

WHEN 'M' THEN placa*0.95

WHEN 'Ţ' THEN placa*1.1

ELSE placa

END nova_plaća

FROM djelatnik;

• SELECT ime, prezime, spol, placa,

DECODE (spol, 'M', placa*0.95, 'Ţ', placa*1.1, placa) nova_plaća

FROM djelatnik;

Page 65: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 65

Osnovne metode spajanja tablica

Page 66: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 66

SQL (spajanje tablica)

SQL – osnovne metode spajanja tablica:

equi-join

non-equi join

outer join

self join

Page 67: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 67

SQL (osnovna sintaksa spajanja tablica)

• SELECT tablica1.atribut1, tablica2.atribut2

FROM tablica1

[INNER JOIN tablica2

ON (tablica1.atribut1=tablica2.atribut2)] |

[LEFT|RIGHT|FULL OUTER JOIN tablica2

ON (tablica1.atribut1=tablica2.atribut2)];

• Rezervirane riječi INNER i OUTER se mogu izostaviti !

• JOIN ON – Sintaksa za spajanje koja se najčešće koristi bilo

da je u pitanju equi-join ili self-join.

Page 68: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 68

SQL (osnovna sintaksa spajanja tablica)

• SELECT tablica1.atribut1, tablica2.atribut2, ...

FROM tablica1, tablica2, tablica3, ...

WHERE uvjet spajanja 1 (FK<->PK)

AND uvjet spajanja 2 (FK<->PK)

...

P R A V I L O !

Broj tablica – 1 = Broj uvjeta spajanja

Page 69: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 69

SQL CROSS JOIN (Kartezijev produkt)

Primjer:

• SELECT id, ime, naziv_mjesta

FROM osoba, mjesto

• SELECT id, ime, naziv_mjesta

FROM osoba

CROSS JOIN mjesto

Obratiti pozornost ! Obavljanje Kartezijevog produkta relacija ĉesto je posljedica pogreške programera – kad se zaboravi navesti uvjet spajanja.

Page 70: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 70

ID IME PBR

1 Pero 88000

2 Mate 88000

3 Ivo 88220

PBR NAZIV_MJESTA

88000 Mostar

88220 Široki Brijeg

OSOBA MJESTO

ID IME NAZIV_MJESTA

1 Pero Mostar

2 Mate Mostar

3 Ivo Mostar

1 Pero Široki Brijeg

2 Mate Široki Brijeg

3 Ivo Široki Brijeg

OSOBA x MJESTO

SQL CROSS JOIN

Page 71: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 71

ID IME PBR

1 Pero 88000

2 Mate 88000

3 Ivo 88220

4 Tomo 88000

5 Marija 88220

PBR NAZIV_MJESTA

88000 Mostar

88220 Široki Brijeg

OSOBA MJESTO

Primjer:

• SELECT id, ime, naziv_mjesta

FROM osoba, mjesto

WHERE osoba.pbr=mjesto.pbr;

• SELECT id, ime, naziv_mjesta

FROM osoba JOIN mjesto

ON osoba.pbr=mjesto.pbr;

SQL EQUI JOIN

Page 72: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 72

ID IME NAZIV_MJESTA

1 Pero Mostar

2 Mate Mostar

3 Ivo Široki Brijeg

4 Tomo Mostar

5 Marija Široki Brijeg

Rezultat upita

Primjer:

• SELECT id, ime, naziv_mjesta

FROM osoba, mjesto

WHERE osoba.pbr=mjesto.pbr;

• SELECT id, ime, naziv_mjesta

FROM osoba JOIN mjesto

ON osoba.pbr=mjesto.pbr;

SQL EQUI JOIN

OSOBA wv MJESTO

Page 73: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 73

Primjer (spajanje 3 tablice):

• SELECT ime, prezime, placa, o.naziv_opcine, z.naziv_zupanije

FROM djelatnik d, opcina o, zupanija z

WHERE d.sifra_opcine = o.sifra_opcine

AND o.sifra_zupanije = z.sifra_zupanije;

• SELECT ime, prezime, placa, o.naziv_opcine, z.naziv_zupanije

FROM djelatnik d

JOIN opcina o

ON d.sifra_opcine = o.sifra_opcine

JOIN zupanija z

ON o.sifra_zupanije = z.sifra_zupanije;

SQL EQUI JOIN

Page 74: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 74

• EQUI JOIN – spajanje koje se najčešće koristi !

o Kao operator spajanja koristi se isključivo operator jednakosti (=)

• NON-EQUI JOIN – spajanje koje se relativno rijetko koristi.

o Kod pisanja uvjeta spajanja ne koristi se operator jednakosti (=), nego se koriste drugi operatori usporedbe (>, <, >=, <=, <>)

Primjer:

• SELECT o.ime, o.prezime, o.placa

FROM osoba o, platni_razred p

WHERE o.placa > p.min_placa;

SQL NON-EQUI JOIN

Page 75: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 75

• NATURAL JOIN – bazira se na spajanju onih atributa iz tablica koji imaju isto ime i tip.

U donjem primjeru to je atribut sifra_zupanije (PK u tablici zupanija, FK u tablici opcina).

Primjer:

• SELECT o.sifra_opcine, o.naziv_opcine, z.naziv_zupanije

FROM opcina o NATURAL JOIN zupanija z;

SQL NATURAL JOIN

Page 76: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 76

ID IME PBR

1 Pero 88000

2 Mate 88000

3 Ivo 88220

4 Tomo 88000

5 Marija NULL

PBR NAZIV_MJESTA

88000 Mostar

88220 Široki Brijeg

OSOBA MJESTO

?

SQL OUTER JOIN

Primjer:

• SELECT id, ime, naziv_mjesta

FROM osoba JOIN mjesto

ON osoba.pbr=mjesto.pbr;

• SELECT id, ime, naziv_mjesta

FROM osoba LEFT JOIN mjesto

ON osoba.pbr=mjesto.pbr;

Page 77: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 77

ID IME NAZIV_MJESTA

1 Pero Mostar

2 Mate Mostar

3 Ivo Široki Brijeg

4 Tomo Mostar

5 Marija

• SELECT id, ime, naziv_mjesta

FROM osoba JOIN mjesto

ON osoba.pbr=mjesto.pbr;

ID IME NAZIV_MJESTA

1 Pero Mostar

2 Mate Mostar

3 Ivo Široki Brijeg

4 Tomo Mostar

• SELECT id, ime, naziv_mjesta

FROM osoba LEFT JOIN mjesto

ON osoba.pbr=mjesto.pbr;

SQL OUTER JOIN

Page 78: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 78

Primjer:

• SELECT d.ime, d.prezime, d.placa, rm.naziv_radmj

FROM djelatnik d JOIN radno_mjesto rm

ON d.sifra_radmj=rm.sifra_radmj

WHERE placa>1500;

• SELECT d.ime, d.prezime, d.placa, rm.naziv_radmj, o.naziv_odjela

FROM djelatnik d JOIN radno_mjesto rm

ON d.sifra_radmj=rm.sifra_radmj

LEFT JOIN odjel o

ON rm.sifra_odjela=o.sifra_odjela

WHERE placa>1500;

SQL OUTER JOIN

Page 79: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 79

Primjeri:

• SELECT rm.naziv_radmj, o.naziv_odjela

FROM radno_mjesto rm

LEFT (OUTER) JOIN odjel o

ON rm.sifra_odjela=o.sifra_odjela;

• SELECT rm.naziv_radmj, o.naziv_odjela

FROM radno_mjesto rm

RIGHT (OUTER) JOIN odjel o

ON rm.sifra_odjela=o.sifra_odjela;

• SELECT rm.naziv_radmj, o.naziv_odjela

FROM radno_mjesto rm

FULL (OUTER) JOIN odjel o

ON rm.sifra_odjela=o.sifra_odjela;

SQL OUTER JOIN

Page 80: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 80

ID IME ID_SEFA

1 Pero NULL

2 Mate 1

3 Ivo 1

4 Tomo 1

5 Marija 3

OSOBA

Primjer:

• SELECT a.id, a.ime, b.ime šef

FROM osoba a, osoba b

WHERE a.id_sefa=b.id;

ID IME_DJ IME_SEFA

2 Mate Pero

3 Ivo Pero

4 Tomo Pero

5 Marija Ivo

SQL SELF JOIN

• SELECT a.id, a.ime, b.ime šef

FROM osoba a JOIN osoba b

ON a.id_sefa=b.id;

Page 81: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 81

Primjer:

• SELECT d1.ime || ' ' || d1.prezime djelatnik, d1.placa, d2.ime || ' ' || d2.prezime šef, d2.placa

FROM djelatnik d1, djelatnik d2

WHERE d1.id_sefa=d2.id_djelatnika

AND d1.placa > d2.placa;

• SELECT d1.ime || ' ' || d1.prezime djelatnik, d1.placa, d2.ime || ' ' || d2.prezime šef, d2.placa

FROM djelatnik d1 JOIN djelatnik d2

ON d1.id_sefa = d2.id_djelatnika

WHERE d1.placa > d2.placa;

SQL SELF JOIN

Page 82: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 82

SQL podupiti

Page 83: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 83

Podupiti

SELECT ...

FROM ...

WHERE ...

( SELECT ...

FROM ...

WHERE ... )

Podupit

Page 84: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 84

Korištenje podupita

Primjer:

• SELECT ime, prezime, placa

FROM djelatnik

WHERE placa >

( SELECT placa

FROM djelatnik

WHERE ime = 'Ernest' );

• U ovom primjeru «unutarnji» SELECT iskaz (PODUPIT) vraća plaću djelatnika po imenu Ernest.

• «Vanjski» SELECT iskaz koristi taj rezultat «unutarnjeg» upita da bi prikazao sve djelatnike koji zarađuju više od tog iznosa.

1800

Page 85: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 85

Tipovi podupita

• Podupiti koji vraćaju jedan redak

Operatori: =, >, <, >=, <=, <>

• Podupiti koji vraćaju više od jednog retka

Operatori: IN, ANY, ALL

Page 86: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 86

Podupiti – Primjeri najĉešćih pogrešaka

GREŠKA ! Podupit vraća više od jednog retka, a koristi se

operator jednakosti (=).

Primjer:

• SELECT id_djelatnika, ime, prezime, placa

FROM djelatnik

WHERE placa =

( SELECT MIN(placa)

FROM djelatnik

GROUP BY sifra_radmj );

→ ORA-01427: single-row subquery returns more than one row

Page 87: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 87

Podupiti koji vraćaju više od jednog retka

IN operator

Da bi ispravili grešku u prethodnom upitu operator (=) npr. moţemo promijeniti u operator (IN).

Primjer:

• SELECT id_djelatnika, ime, prezime, placa

FROM djelatnik

WHERE placa IN

( SELECT MIN(placa)

FROM djelatnik

GROUP BY sifra_radmj );

Page 88: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 88

Podupiti – Primjeri najĉešćih pogrešaka

GREŠKA ! Podupit ne vraća niti jedan redak.

Primjer:

• SELECT ime, prezime, sifra_radmj

FROM djelatnik

WHERE sifra_radmj =

( SELECT sifra_radmj

FROM djelatnik

WHERE ime='Grigor' );

Page 89: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 89

Podupiti – Primjer

Primjer: • Prikaţi djelatnike ĉije radno mjesto je isto kao i djelatnika 101.

• SELECT ime, prezime, sifra_radmj

FROM djelatnik

WHERE sifra_radmj =

( SELECT sifra_radmj

FROM djelatnik

WHERE id_djelatnika = 101 );

IT-PROG

Page 90: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 90

Podupiti – Primjer korištenja agregatnih funkcija

Primjer: • Prikaţi sve djelatnike (ime, prezime, datum zaposlenja, plaća)

ĉija plaća je veća od prosjeĉne plaće u poduzeću.

• SELECT ime, prezime, datum_zaposlenja, placa

FROM djelatnik

WHERE placa >

( SELECT AVG (placa)

FROM djelatnik

);

1.450

Page 91: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 91

Podupiti – Primjer

Primjer: • Prikaţi djelatnike ĉije radno mjesto je isto kao i djelatnika 101

i ĉija plaća je veća od plaće djelatnike 2.

• SELECT ime, prezime, sifra_radmj, placa

FROM djelatnik

WHERE sifra_radmj = ( SELECT sifra_radmj

FROM djelatnik

WHERE id_djelatnika = 101 )

AND placa > ( SELECT placa

FROM djelatnik

WHERE id_djelatnika = 2 );

Page 92: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 92

Podupiti – Primjer korištenja podupita u HAVING dijelu iskaza

Primjer:

• SELECT sifra_radmj, AVG (placa)

FROM djelatnik

GROUP BY sifra_radmj

HAVING AVG (placa) >

( SELECT AVG(placa)

FROM djelatnik

WHERE sifra_radmj='IT-PROG');

• Podupit se moţe koristiti ne samo u WHERE dijelu SELECT iskaza, nego i u HAVING dijelu iskaza.

• Prvo se izvršava podupit, a zatim se rezultat podupita vraća u HAVING dio vanjskog upita.

Page 93: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 93

Podupiti koji vraćaju više od jednog retka

ANY i ALL operator

< ANY = manje od maximuma

> ANY = više od minimuma

< ALL = manje od minimuma

> ALL = više od maximuma

Page 94: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 94

Podupiti – Primjer

Primjer: • Prikaţi djelatnike koji nisu IT programeri i ĉija plaća je niţa od

plaće nekog od IT programera.

• SELECT id_djelatnika, ime, prezime, sifra_radmj, placa

FROM djelatnik

WHERE placa < ANY

( SELECT placa

FROM djelatnik

WHERE sifra_radmj = 'IT-PROG' )

AND sifra_radmj <> 'IT-PROG' ;

Page 95: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 95

Podupiti – Primjer

Primjer: • Prikaţi djelatnike koji nisu na radnom mjestu PROD-KAM i ĉija

plaća je niţa od plaće svih djelatnika na radnom mjestu PROD-KAM.

• SELECT id_djelatnika, ime, prezime, sifra_radmj, placa

FROM djelatnik

WHERE placa < ALL

( SELECT placa

FROM djelatnik

WHERE sifra_radmj = 'PROD-KAM' )

AND sifra_radmj <> 'PROD-KAM' ;

Page 96: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 96

Korelacijski podupiti

uzima se kandidat red iz vanjskog upita

izvršava se unutarnji upit koristeći podatke iz

kandidat reda

vrijednosti iz unutarnjeg upita se koriste da se kandidat red

kvalificira ili diskvalificira

• Podupit (unutarnji upit) se izvršava jedanput za svaki redak iz vanjskog upita.

Page 97: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 97

Korelacijski podupiti

Primjer: • Prikaţi sve djelatnike koji zaraĊuju više od prosjeĉne plaće u

njihovom odjelu.

• SELECT ime, prezime, d.sifra_radmj, placa

FROM djelatnik d, radno_mjesto vanjski_rm

WHERE d.sifra_radmj=vanjski_rm.sifra_radmj

AND placa > ( SELECT AVG(placa)

FROM djelatnik d, radno_mjesto rm

WHERE d.sifra_radmj=rm.sifra_radmj

AND rm.sifra_odjela = vanjski_rm.sifra_odjela );

Page 98: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 98

EXISTS operator

• EXISTS operator testira postojanje redaka u rezultatu podupita:

– ako podupit vrati bar jedan redak operator EXISTS će vratiti TRUE.

– ako podupit ne vrati niti jedan redak operator EXISTS će vratiti FALSE.

Page 99: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 99

Podupiti – Primjer

Primjer: • Prikaţi sve djelatnike koji imaju bar jednu osobu koja im je

“podreĊena”.

a) korištenjem EXISTS operatora

• SELECT id_djelatnika, ime, prezime, sifra_radmj

FROM djelatnik d

WHERE EXISTS (

SELECT 'X'

FROM djelatnik

WHERE id_sefa=d.id_djelatnika

);

Page 100: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 100

Podupiti – Primjer

Primjer: • Prikaţi sve djelatnike koji imaju bar jednu osobu koja im je

“podreĊena”.

b) korištenjem IN operatora

• SELECT id_djelatnika, ime, prezime, sifra_radmj

FROM djelatnik

WHERE id_djelatnika IN (

SELECT id_sefa

FROM djelatnik

WHERE id_sefa IS NOT NULL

);

Page 101: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 101

Podupiti – Primjer

Primjer: • Prikaţi općine u kojima ne ţivi niti jedan djelatnik poduzeća.

a) korištenjem NOT EXISTS operatora

• SELECT sifra_opcine, naziv_opcine

FROM opcina o

WHERE NOT EXISTS (

SELECT 'X'

FROM djelatnik

WHERE sifra_opcine=o.sifra_opcine

);

Page 102: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 102

Podupiti – Primjer

Primjer: • Prikaţi općine u kojima ne ţivi niti jedan djelatnik poduzeća.

b) korištenjem NOT IN operatora

• SELECT sifra_opcine, naziv_opcine

FROM opcina

WHERE sifra_opcine NOT IN

( SELECT sifra_opcine

FROM djelatnik );

Page 103: BAZE PODATAKA - uni-mo.sve-mo.bauni-mo.sve-mo.ba/~goran/nastava/BAZE_Vjezbe.pdf · • SQL se koristi kao programski jezik i interaktivni upitni jezik. Kao programski jezik može

Ak.god. 2014/2015. BAZE PODATAKA 103

Web:

http://www.fsr.ba/~goran

Pitanja, primjedbe, dogovor za konzultacije ...

o E-mail: [email protected]

[email protected]

Baze podataka