Download as pdf or txt
Download as pdf or txt
You are on page 1of 9

27.10.

2008

Uvod
• SQL – kompletan jezik za rad s relacijskom bazom
podataka

SQL
• Skupine naredbi:
– naredbe za operacije s podacima
– naredbe za definiranje baze podataka
– naredbe za upravljanje (uspostavljanje indeksa,
Mladen Varga
kontroliranje pristupa bazi ...)
Katedra za informatiku
• Standardi
– SQL-89: standardiziran 1986., modificiran 1989.
– SQL-92: ANSI X3.135-1992 (ISO/IEC 9075:1992)
1 – SQL3: veliki standard objavljen u dijelovima 2

SQL3 Naredbe
JTC1/SC32 Data management and interchange:
• ISO/IEC 9075-1:2003 Information technology -- Database languages -- SQL -- Part 1: Framework
• SELECT, INSERT, DELETE, UPDATE
(SQL/Framework)
• ISO/IEC 9075-2:2003 Information technology -- Database languages -- SQL -- Part 2: Foundation • COMMIT, ROLLBACK
(SQL/Foundation)
• ISO/IEC 9075-3:2003 Information technology -- Database languages -- SQL -- Part 3:
Call-Level Interface (SQL/CLI)
• CREATE TABLE, ALTER TABLE, DROP TABLE
• ISO/IEC 9075-4:2003 Information technology -- Database languages -- SQL -- Part 4: Persistent
Stored Modules (SQL/PSM) • CREATE VIEW, DROP VIEW
• ISO/IEC 9075-5:1999 Information technology -- Database languages -- SQL -- Part 5:
Host Language Bindings (SQL/Bindings) • CREATE INDEX, DROP INDEX
• ISO/IEC 9075-5:1999/Amd 1:2001 On-Line Analytical Processing (SQL/OLAP)
• ISO/IEC 9075-5:1999/Amd 1:2001/Cor 1:2003 • GRANT, REVOKE
• ISO/IEC 9075-5:1999/Cor 2:2003 ISO/IEC 9075-9:2003 Information technology -- Database
languages -- SQL -- Part 9: Management of External Data (SQL/MED)
• ISO/IEC 9075-10:2003 Information technology -- Database languages -- SQL -- Part 10: Object
Language Bindings (SQL/OLB)
• ISO/IEC 9075-11:2003 Information technology -- Database languages -- SQL -- Part 11:
Information and Definition Schemas (SQL/Schemata)
• ISO/IEC 9075-13:2003 Information technology -- Database languages -- SQL -- Part 13: SQL
Routines and Types Using the Java TM Programming Language (SQL/JRT)
• ISO/IEC 9075-14:2003 Information technology -- Database languages -- SQL -- Part 14: XML-
Related Specifications (SQL/XML)
3 4

SELECT PARTNER_SIFRA PARTNER_NAZIV PARTNER_ADRESA MB


10 Zagreb d.o.o. Zagreb 3

• SELECT [ALL|DISTINCT] atribut[,atribut...] 20 Horizont d.d. Sesvete 5


30 Josip Ferić D. Selo 11
FROM relacija[,relacija...]
40 A-banka d.d. Zagreb ?
[WHERE uvjet] 60 Brzopromet Zagreb 1
[GROUP BY atribut[,atribut...]] 70 Vicko Stić Split 9
[HAVING uvjet] 75 Kompakt d.o.o. Osijek 5
[ORDER BY specifikacija uređenja]; 80 Hotel F Rijeka 9
90 Amalija d.d. Pula 9

• Tipični SELECT upit: MB IME_PREZIME DATUM_RODJENJA MB_VG PLACA DODATAK


1 Ivan Perić 1948-11-26 1 120 0
SELECT A1,A2,...,An 3 Ana Horvat 1952-03-19 11 110 10
FROM R1,R2,...,Rm 5 Josip Antić 1959-09-13 1 80 30
WHERE uvjet; 9 Ante Ivić 1962-05-06 1 100 45

5
11 Maja Markić 1939-12-01 11 120 0 6

1
27.10.2008

Primjer a Primjer b
• ispis čitave relacije: • ispis atributa jedne relacije: ispisati atribute
ispisati sadržaj relacije TRGOVAC IME_PREZIME, DATUM_RODJENJA navedenim
• SELECT * FROM TRGOVAC; redoslijedom (operacija projekcije po atributima)
• SELECT IME_PREZIME, DATUM_RODJENJA FROM
TRGOVAC;
MB IME_PREZIME DATUM_RODJENJA MB_VG PLACA DODATAK

1 Ivan Perić 1948-11-26 1 120 0 IME_PREZIME DATUM_RODJENJA

3 Ana Horvat 1952-03-19 11 110 10 Ivan Perić 1948-11-26


Ana Horvat 1952-03-19
5 Josip Antić 1959-09-13 1 80 30
Josip Antić 1959-09-13
9 Ante Ivić 1962-05-06 1 100 45
Ante Ivić 1962-05-06
11 Maja Markić 1939-12-01 11 120 0
7
Maja Markić 1939-12-01 8

Primjer c1 Složeni upiti


• selekcija pojedinih n-torki jedne relacije (operacija • Theta-operatori
selekcije): ispisati poslovne partnere iz Zagreba: <> (različito)
• SELECT * FROM PARTNER < (manje od)
WHERE PARTNER_ADRESA = 'Zagreb'; > (vede od)
<= (manje ili jednako)
>= (vede ili jednako)
PARTNER_SIFRA PARTNER_NAZIV PARTNER_ADRESA MB
• Složeni upiti
10 Zagreb d.o.o. Zagreb 3
– pomod logičkih operatora AND, OR ili NOT:
40 A-banka d.d. Zagreb ?
PLACA>100 AND DODATAK>20
60 Brzopromet Zagreb 1
– x>=y AND x<=z pomodu operatora BETWEEN:
x BETWEEN y AND z
9 10

Primjer c2 Primjer c3
• ispisati matični broj, ime i prezime trgovaca kojima je • ispisati naziv partnera i adresu partnera čiji naziv počinje
voditelj trgovac s matičnim brojem 1 koji imaju pladu slovom A:
vedu od 99: • SELECT PARTNER_NAZIV, PARTNER_ADRESA
• SELECT MB, IME_PREZIME FROM PARTNER
FROM TRGOVAC WHERE PARTNER_NAZIV LIKE 'A%';
WHERE MB_VG=1 AND PLACA > 99;

MB IME_PREZIME PARTNER_NAZIV PARTNER_ADRESA


1 Ivan Perić A-banka d.d. Zagreb
9 Ante Ivić Amalija d.d. Pula

11 12

2
27.10.2008

Primjer c4 Primjer d
• ispisati šifru, naziv i adresu poslovnog partnera kojemu • selekcija n-torki jedne relacije i uređeni ispis: ispisati matični
nije raspoređen trgovac (n-torke koje u atributu MB broj, ime i prezime trgovca, matični broj voditelja grupe i pladu
uređeno po rastudem redoslijedu matičnog broja voditelja i
relacije PARTNER imaju nul-vrijednost):
padajudoj pladi
• SELECT PARTNER_SIFRA, PARTNER_NAZIV, • SELECT MB, IME_PREZIME, MB_VG, PLACA
PARTNER_ADRESA FROM TRGOVAC
FROM PARTNER ORDER BY MB_VG ASC, PLACA DESC;
WHERE MB IS NULL;
MB IME_PREZIME MB_VG PLACA
1 Ivan Perić 1 120
PARTNER_SIFRA PARTNER_NAZIV PARTNER_ADRESA 9 Ante Ivić 1 100
40 A-banka d.d. Zagreb 5 Josip Antić 1 80
11 Maja Markić 11 120
3 Ana Horvat 11 110
13 14

Funkcije Primjer e1
• AVG (atribut) - srednja vrijednost atributa • izračunati najmanju, srednju i najvedu pladu trgovaca,
• MAX (atribut) - maksimalna vrijednost atributa te broj trgovaca (n-torki) koji su sudjelovali u izračunu:
• MIN (atribut) - minimalna vrijednost atributa • SELECT MIN(PLACA), AVG(PLACA),
• SUM (atribut) - zbroj vrijednosti atributa MAX(PLACA), COUNT(*)
FROM TRGOVAC;
• COUNT (*) - broj selektiranih n-torki
• COUNT (atribut) - broj nenulvrijednosti u atributu
MIN(PLACA) AVG(PLACA) MAX(PLACA) COUNT(*)
80 106 120 5

15 16

Primjer e2 Primjer e3
• izračunati najmanju, srednju i najvedu pladu, te broj • izračunati najmanju, srednju i najvedu pladu te broj
trgovaca (n-torki) koji su sudjelovali u izračunu; izračun trgovaca koji su sudjelovali u izračunu; izračun načiniti
načiniti po grupama: po grupama u kojima radi više od dva trgovca:
• SELECT MIN(PLACA), AVG(PLACA), • SELECT MIN(PLACA), AVG(PLACA),
MAX(PLACA), COUNT(*), MB_VG MAX(PLACA), COUNT(*), MB_VG
FROM TRGOVAC FROM TRGOVAC
GROUP BY MB_VG; GROUP MB_VG
HAVING COUNT(*) > 2;
MIN(PLACA) AVG(PLACA) MAX(PLACA) COUNT(*) MB_VG
80 100 120 3 1
110 115 120 2 11 MIN(PLACA) AVG(PLACA) MAX(PLACA) COUNT(*) MB_VG
80 100 120 3 1

17 18

3
27.10.2008

Primjer e4 Primjer f1
• izračunati najmanji, prosječni i najvedi dohodak u • selekcija n-torki jedne relacije uz korištenje podupita
poduzedu; dohodak je zbroj plade i dodatka, sve (selekcija u selekciji) - ispisati matični broj, ime i
pomnoženo s 3: prezime trgovaca koji rade u grupi s Josipom Antidem:
• SELECT MIN(PLACA+DODATAK)*3 “Najmanji", • SELECT MB, IME_PREZIME
AVG(PLACA+DODATAK)*3 "Prosječni", FROM TRGOVAC
MAX(PLACA+DODATAK)*3 “Najvedi“ WHERE MB_VG=
FROM TRGOVAC (SELECT MB_VG FROM TRGOVAC
WHERE IME_PREZIME='Josip Antid');
MB IME_PREZIME
Najmanji Prosječni Najveći 1 Ivan Perić
330 369 435 5 Josip Antić
9 Ante Ivić
19 20

Primjer f1 - drugo rješenje Primjer f2


• SELECT DRUGA.MB, DRUGA.IME_PREZIME • ispisati naziv i adrese poslovnih partnera koji rade s
FROM TRGOVAC DRUGA, TRGOVAC PRVA trgovcima što su rođeni nakon 1957. godine:
WHERE PRVA.IME_PREZIME='Josip Antid‘ • SELECT PARTNER_NAZIV, PARTNER_ADRESA
AND PRVA.MB_VG=DRUGA.MB_VG; FROM PARTNER
WHERE MB IN
(SELECT MB FROM TRGOVAC
WHERE DATUM_RODJENJA>'1957-12-31');
PARTNER_NAZIV PARTNER_ADRESA
Horizont d.d. Sesvete
Vicko Stić Split
Kompakt d.o.o. Osijek
Hotel F Rijeka
21 Amalija d.d. Pula 22

Primjer g1 Primjer g1 – vanjsko spajanje


• selekcija podataka n-torki iz više relacija (spajanje) - ispisati • SELECT PARTNER_NAZIV, PARTNER_ADRESA,
naziv i adresu poslovnih partnera te ime i prezime trgovaca IME_PREZIME
koji s njima rade: FROM PARTNER,TRGOVAC
• SELECT PARTNER_NAZIV, PARTNER_ADRESA, IME_PREZIME WHERE PARTNER.MB /=TRGOVAC.MB;
FROM PARTNER,TRGOVAC PARTNER_NAZIV PARTNER_ADRESA IME_PREZIME
WHERE PARTNER.MB=TRGOVAC.MB; Zagreb d.o.o. Zagreb Ana Horvat
PARTNER_NAZIV PARTNER_ADRESA IME_PREZIME Horizont d.d. Sesvete Josip Antić
Zagreb d.o.o. Zagreb Ana Horvat Josip Ferić Dugo Selo Maja Markić
Horizont d.d. Sesvete Josip Antić A-banka d.d. Zagreb ?
Josip Ferić Dugo Selo Maja Markić Brzopromet Zagreb Ivan Perić
Brzopromet Zagreb Ivan Perić Vicko Stić Split Ante Ivić
Vicko Stić Split Ante Ivić Kompakt d.o.o. Osijek Josip Antić
Kompakt d.o.o. Osijek Josip Antić Hotel F Rijeka Ante Ivić
Hotel F Rijeka Ante Ivić Amalija d.d. Pula Ante Ivić
23 24
Amalija d.d. Pula Ante Ivić

4
27.10.2008

Primjer g2 Primjer g3
• spajanje triju relacija: ispisati naziv poslovnog partnera, ime i
• spajanje iste relacije: ispisati matični broj, ime i prezime zaduženog trgovca te ime i prezime voditelja njegove
prezime trgovca te matični broj, ime i prezime voditelja grupe:
grupe kojoj trgovac pripada: • SELECT PARTNER_NAZIV, RADI.IME_PREZIME "Trgovac",
• SELECT RADI.MB, RADI.IME_PREZIME, VODI.IME_PREZIME "Voditelj“
FROM PARTNER, TRGOVAC RADI, TRGOVAC VODI
VODI.MB MV, VODI.IME_PREZIME VODITELJ
WHERE PARTNER.MB=RADI.MB AND RADI.MB_VG=VODI.MB;
FROM TRGOVAC RADI, TRGOVAC VODI PARTNER_NAZIV Trgovac Voditelj
WHERE RADI.MB_VG=VODI.MB; Zagreb d.o.o. Ana Horvat Maja Markić
Horizont d.d. Josip Antić Ivan Perić
MB IME_PREZIME MV VODITELJ Josip Ferić Maja Markić Maja Markić
1 Ivan Perić 1 Ivan Perić Brzopromet Ivan Perić Ivan Perić
3 Ana Horvat 11 Maja Markić Vicko Stić Ante Ivić Ivan Perić
5 Josip Antić 1 Ivan Perić Kompakt d.o.o. Josip Antić Ivan Perić
9 Ante Ivić 1 Ivan Perić Hotel F Ante Ivić Ivan Perić
11 Maja Markić 11 Maja Markić 25 Amalija d.d. Ante Ivić Ivan Perić 26

INSERT INSERT – unos vrijednosti


• upis vrijednosti atributa i unos jedne n-torke u • unijeti podatke novog poslovnog partnera s brojem 95,
relaciju, nazivom Marketing i adresom Zagreb te nepoznatim
trgovcem:
• selektiranje n-torki i njihovih atributa iz jedne relacije
(ili relacija) i prijenos u drugu relaciju • INSERT INTO PARTNER
VALUES (95,'Marketing','Zagreb',NULL);

• unijeti podatke novog trgovca: matični broj 19, ime i


• INSERT INTO relacija [(atribut[,atribut...])] prezime Marko Ferid, datum rođenja 27.11.1956:
{VALUES(vrijed. atributa[,vrijed. • INSERT INTO TRGOVAC (MB, IME_PREZIME,
atributa...])|SELECT...}; DATUM_RODJENJA)
VALUES (19,'Marko Ferid','1956-11-27');

27 28

INSERT – unos selekcijom DELETE


• upisati podatke trgovaca iz relacije TRGOVAC, rođenih • DELETE FROM relacija
prije '1950-01-01', u relaciju STARIJI_TRGOVAC (MB, [WHERE uvjet];
IME_PREZIME):
• brisati sve podatke trgovca s matičnim brojem 9:
• INSERT INTO STARIJI_TRGOVAC (MB, IME_PREZIME) • DELETE FROM TRGOVAC
SELECT MB, IME_PREZIME WHERE MB=9;
FROM TRGOVAC
WHERE DATUM_RODJENJA<'1950-01-01';
– brisati sve poslovne partnere iz Zagreba:
MB IME_PREZIME
• DELETE FROM PARTNER
1 Ivan Perić
WHERE PARTNER_ADRESA='Zagreb';
11 Maja Markić

29 30

5
27.10.2008

UPDATE COMMIT, ROLLBACK


• UPDATE relacija • COMMIT WORK;
SET atribut=izraz
[WHERE uvjet];
• promijeniti naziv partnera broj 75 u Granit, te sjedište u • ROLLBACK WORK;
Vinkovce:
• UPDATE PARTNER
SET PARTNER_NAZIV='Granit',
PARTNER_ADRESA='Vinkovci‘
WHERE PARTNER_SIFRA=75;
• povedati svim trgovcima grupe 11 (to je matični broj voditelja
grupe) dodatak za 30:
• UPDATE TRGOVAC
SET DODATAK=DODATAK+30
WHERE MB_VG=11; 31 32

Transakcija Svojstva transakcije - ACID


• jedinica rada na bazi podataka • Atomicity - atomarnost - transakcija se mora obaviti u
• sastoji od niza logički povezanih operacija (izmjena) cijelosti ili se uopde ne smije obaviti
• svojstvo - obavlja se u potpunosti ili nikako • Consistency - konzistentnost - transakcijom baza
• početak transakcije - BEGIN WORK podataka prelazi iz jednog konzistentnog stanja u
drugo konzistentno stanje
• završetak transakcije
• Isolation - izolacija - kada se paralelno obavljaju dvije
– COMMIT WORK - uspješan završetak - potvrđivanje ili više transakcija, njihov učinak mora biti jednak kao
transakcije da su se obavljale jedna iza druge
– ROLLBACK WORK - neuspješan završetak - • Durability - izdržljivost - ako je transakcija obavila svoj
poništavanje transakcije - poništavanje svih izmjena posao, njezini efekti ne smiju biti izgubljeni u slučaju
koje je obavila transakcija kvara sustava, čak i ako se kvar desi neposredno nakon
33 završetka transakcije 34

Određivanje granica transakcije Primjer transakcije


• eksplicitno: CREATE PROCEDURE prijenos (s_racuna INTEGER, na_racun INTEGER,
iznos DECIMAL (8,2))
BEGIN WORK DEFINE pom_saldo DECIMAL (8,2);
……… BEGIN WORK;
………. UPDATE racun SET saldo = saldo – iznos
COMMIT WORK (ili ROLLBACK WORK) WHERE br_racun = s_racuna;
• Implicitno - svaka operacija izmjene u bazi podataka UPDATE racun SET saldo = saldo + iznos
(npr. UPDATE naredba) predstavlja transakciju WHERE br_racun = na_racun;
SELECT saldo INTO pom_saldo FROM racun
• transakcije se ne mogu “ugnježđivati” WHERE br_racun = s_racuna;
- jedna aplikacija u jednom času može imati samo IF pom_saldo < 0 THEN ROLLBACK WORK;
jednu aktivnu transakciju ELSE COMMIT WORK;
• sve operacije obnove moraju se obavljati unutar END IF
END PROCEDURE
granica transakcije
35 36

6
27.10.2008

CREATE TABLE
• Sa stanovišta krajnjeg korisnika transakcija je • CREATE TABLE relacija (atribut[,atribut...]);
nedjeljiva
– ne zanima ga činjenica da se istovremeno obavlja • definirati relacijsku shemu relacije TRGOVAC:
više operacija u bazi podataka • CREATE TABLE TRGOVAC (
• Korisnik mora biti siguran da je zadatak obavljen MB NUMERIC(3)
potpuno i samo jednom! NOT NULL UNIQUE,
IME_PREZIME CHARACTER(30) NOT NULL,
DATUM_RODJENJA CHARACTER(10),
MB_VG NUMERIC(3),
PLACA NUMERIC(4),
DODATAK NUMERIC(4)
37 ); 38

ALTER TABLE DROP TABLE


• dodavanje novog atributa: dodati atribut ODJEL_BROJ • izbaciti relacijsku shemu i relaciju PARTNER:
u relaciju TRGOVAC:
• ALTER TABLE TRGOVAC • DROP TABLE PARTNER;
ADD (ODJEL_BROJ NUMERIC(3));

• redefinicija postojedeg atributa: povedati format


atributa IME_PREZIME na 40 znakova:
• ALTER TABLE TRGOVAC
MODIFY (IME_PREZIME CHARACTER(40));

39 40

CREATE VIEW CREATE VIEW – primjer a


• Pogled • sastaviti pogled kojim de vidjeti samo trgovci koji su
– jednostavnije postavljanje upita (pogodno za voditelji grupa:
korisnike s oskudnim znanjem)
– sakrivanje određenih podataka (koristan • CREATE VIEW VODITELJ
mehanizam kontrole pristupa podacima) AS SELECT * FROM TRGOVAC
– izgradnja nezavisnih aplikacija (svaka se relacija WHERE MB=MB_VG;
može pogledom redefinirati)
• SELECT * FROM VODITELJ;
• CREATE VIEW relacija [(atribut[,atribut...])] MB IME_PREZIME DATUM_RODJENJA MB_VG PLACA DODATAK
AS SELECT ... 1 Ivan Perić 1948-11-26 1 120 0
[WITH CHECK OPTION]; 11 Maja Markić 1939-12-01 11 120 0
41 42

7
27.10.2008

CREATE VIEW – primjer b


• sastaviti pogled: matični broj voditelja grupe, broj članova • SELECT * FROM GRUPA
grupe, prosječna plada u grupi, prosjedni dodatak u grupi, i WHERE MB_VG=1;
ukupni prihod (plada + dodatak svih članova pomnožen s 3.5)
grupe
• CREATE VIEW GRUPA
MB_VG BR_CLANOVA PR_PL PR_DOD PRIHOD
(MB_VG, BR_CLANOVA, PR_PL, PR_DOD, PRIHOD)
1 3 100 25 1312.5
AS SELECT MB_VG, COUNT(*), AVG(PLACA),
AVG(DODATAK), SUM(PLACA+DODATAK)*3.5
FROM TRGOVAC
GROUP BY MB_VG;
• SELECT * FROM GRUPA;
MB_VG BR_CLANOVA PR_PL PR_DOD PRIHOD
1 3 100 25 1312.5
11 2 115 5 840.0
43 44

CREATE VIEW – primjer c DROP VIEW


• sastaviti pogled: naziv i adresa poslovnog partnera te ime i • izbaciti definiciju pogleda GRUPA:
prezime trgovca koji s njim radi
• CREATE VIEW PARTNER_TRGOVAC
AS SELECT PARTNER_NAZIV, PARTNER_ADRESA, • DROP VIEW GRUPA;
IME_PREZIME
FROM PARTNER,TRGOVAC
WHERE PARTNER.MB=TRGOVAC.MB;
• SELECT * FROM PARTNER_TRGOVAC
WHERE IME_PREZIME='Ante Ivid';

PARTNER_NAZIV PARTNER_ADRESA IME_PREZIME


Vicko Stić Split Ante Ivić
Hotel F Rijeka Ante Ivić
Amalija d.d. Pula Ante Ivić
45 46

CREATE INDEX DROP INDEX


• formirati indeks (za brzo pronalaženje podataka) po • izbaciti postojedi indeks IME_INDEKS relacije
atributu IME_PREZIME relacije TRGOVAC: TRGOVAC:
• CREATE INDEX IME_INDEKS ON TRGOVAC
(IME_PREZIME); • DROP INDEX IME_INDEKS;

• formirati jedinstveni indeks po atributu MB relacije


TRGOVAC:
• CREATE UNIQUE INDEX MB_INDEKS ON TRGOVAC
(MB);

47 48

8
27.10.2008

GRANT REVOKE
• GRANT {ALL[PRIVILEGES]|privilegija[,privilegija...]} • ukinuti sva prava korištenja relacije TRGOVAC svim
ON relacija
TO {PUBLIC|korisnik[,korisnik...]} korisnicima (osim vlasniku):
[WITH GRANT OPTION]; • REVOKE ALL ON TRGOVAC FROM PUBLIC;

• prenijeti sva prava korištenja relacije TRGOVAC na sve korisnike:


• GRANT ALL PRIVILEGES ON TRGOVAC TO PUBLIC; • ukinuti pravo korištenja operacije UPDATE na relaciji
PARTNER korisnicima Kor12 i Kor14:
• prenijeti pravo korištenja operacija SELECT i UPDATE nad • REVOKE UPDATE ON PARTNER FROM Kor12, Kor14;
relacijom PARTNER na korisnika Kor12, s pravom da to pravo
prenosi na druge korisnike:
• GRANT SELECT, UPDATE ON PARTNER TO Kor12
WITH GRANT OPTION;

49 50

You might also like