You are on page 1of 26

Tehniko veleuilite u Zagrebu Informatiko-raunarski odjel

Baze podataka
2. pred SQL I dio

Baza podataka sa labosa

Brzi teaj ER modela

Objanjenja sintakse
Kad god je bilo mogue, sintaksa SQL naredbe je opisana na najjednostavniji mogui nain kljune su rijei napisane velikim slovima "varijabilni" dio naredbe otisnut je kosim slovima Primjer: DROP DATABASE databaseName

Objanjenja sintakse
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification ...] Kada iza varijable stoji oznaka "..." tada je kasnije opisano to moe stajati na tom mjestu Parametri unutar {} su obvezni Parametri unutar [ ] su opcionalni Znak "|" zamjenjuje rije "ili" create_specification: [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name

Osnovni objekti u SQL jeziku


Osnovni objekti u SQL-u (neki od navedenih ne pripadaju SQL2 standardu) Baza podataka (Database) Tablica (Table) -relacija Stupac (Column) - atribut, kolona, stupac Pogled ili virtualna tablica (View) Sinonim (Synonym) Pravilo integriteta (Constraint) Indeks (Index) Pohranjena procedura (Stored Procedure) Okida (Trigger)
6

Vrijednosti -stringovi
String je niz znakova omeen jednostrukim navodnicima ' ' ili dvostrukim navodnicima " " Uz string je uvijek mogue opisati kojeg je znakovnog tipa i kolotacije [_charset_name]'string' [COLLATE collation_name] Postoji mogunost koritenja slijedeih kontrolnih znakova (escape (escape character) character) \n \' \"" \% \b \t \\ \_ SELECT "hello "hello", ", hello hello, , hello hello, , "\"hello hello"; "; hello 'hello hello'' '' ''hello hello'' '' " "hello hello

Vrijednosti -brojevi
Standardni brojevi se piu normalno sa predznakom - ili bez predznaka za + Decimalni brojevi se mogu pisati sa tokom sa ili bez potencije: 1.96e+10 Heksadecimalne vrijednosti zapoinju sa 0x SELECT 0x41 ispisuje 'A' Boolean vrijednosti su TRUE ili true koji iznosi 1 i FALSE ili false koji iznosi 0 Binarne vrijednosti piu se kao b'vrijednost' ili 0bvrijednost SELECT b'1000001' ispisuje 'A' Nepostojea vrijednost se pie kao NULL (uvijek veliko!)

Vrijednosti - imena objekata


Ime ne smije sadravati:
null znak 0x00 navodnike ne smije zavravati sa razmakom '\' '/' i '.' je zabranjena

Svaki objekat moe biti dohvaen direktno ili preko drugog objekta
puna staza navodi se kada postoje vie objekata istog imena (npr klijent i radnik imaju vjerojatno isti atribut ime) col_name table_name.col_name database_name.table_name.col_name

Prema SQL standardu svi nazivi objekata bi se trebali pisati malim slovima UNIX ima datoteni sustav koji razlikuje mala i velika slova pa tamo treba pripaziti da se uvijek koristi jednako ime u odnosu na mala/velika slova
9

Vrijednosti - Rezervirane rijei


U principu za ime atributa ili tablice je dozvoljeno koristiti rezervirane rijei ali nije poeljno budui da zadaje problema kod pisanja naredbi i razumijevanja napisane naredbe

10

Vrijednosti - Rezervirane rijei

11

Vrijednosti -varijable
Korisnike varijable uvijek poinju sa @ i mogu sadravati sve prirodne zankove iz latin1 seta te znakove . _ i $ Za definiranje korisnike varijable koristimo naredbu SET SET @var_name := expr [, @var_name := expr] ... expr moe biti broj, decimalni broj, string ili NULL Nije poeljno koristiti = umjesto := jer kod pojedinih sintaksi = znai usporedbu, a ne pridruivanje Komentari # i -- komentira do kraja linije /* */ komentar kroz vie linija
12

Podrka znakovima
Character set (kodiranje znakova) - oznaava koji ASCII kod zamjenjuje koje slovo latin2 (iso8859(iso8859-2) - ISO standard za nae znakove cp1250 - Microsoft standard za nae znakove latin1 - obino osnovni standard Collation (kolotacija) - nain usporedbe znakova , odnosno sortiranja zakova po redu, ne po ASCII vrijednostima latin1_swedish_ci - obino osnovni standard cp1250_croatian_ci - po MS standardu latin2_general_ci - po ISO standardu Tablica za laboratorijske vjebe ide po cp1250 i cp1250_croatian_ci standardu Obje stvari su vane da budu definirane u mogunostima posluitelja Raspoloive naine kodiranja znakova SHOW CHARACTER SET Raspoloite kolotacije SHOW COLLATION Kolotacije i kodiranje znakova se obino definiraju kod stvaranja tablice Naknadno postavljanje kodiranja znakova SET CHARACTER SET charset_name Obino se kod spajanja na bazu definira character set (vidi SQLyog za labose)
13

Tipovi podataka - numeriki


M - oznaava broj bitova koji mogu biti pohranjeni BIT[(M)] TINYINT [(M)] [UNSIGNED] [ZEROFILL] mali integer , bez predznaka od 00-255 BOOL, BOOLEAN sinonim za BIT[1] SMALLINT[(M)] [UNSIGNED] [ZEROFILL] bez predznaka 00-65535 MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] bez predznaka 00-16777215 INT[(M)] [UNSIGNED] [ZEROFILL] bez predznaka 00-4294967295 INTEGER[(M)] [UNSIGNED] [ZEROFILL] sinonim za int BIGINT[(M)] [UNSIGNED] [ZEROFILL] bez predznaka 00-18446744073709551615
14

Tipovi podataka - numeriki


M - oznaava broj bitova koji mogu biti pohranjeni D - oznaava broj decimalni mjesta SERIAL sinonim za BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE FLOAT[(M,D)] [UNSIGNED] [ZEROFILL] -3.402823466E+38 do -1.175494351E 1.175494351E-38, 0, 1.175494351E 1.175494351E-38 do 3.402823466E+38. DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL] -1.7976931348623157E+308 do 2.2250738585072014E 2.2250738585072014E-308, 0, 2.2250738585072014E2.2250738585072014E -308 do 1.7976931348623157E+308 DOUBLE PRECISION[(M,D)] [UNSIGNED] [ZEROFILL], REAL[(M,D)] [UNSIGNED] [ZEROFILL] sinonim za DOUBLE DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL] nema definicije float ili double ve stvarno rezervira koliko je potrebno DEC[(M[,D])] sinonim za decimal
15

Tipovi podataka - String


[NATIONAL] CHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name] M= 0 do 255 [NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name] string varijabilne duljine M=0M=0-65535 BINARY(M) za binarni tip podataka (nema definiranu kodnu stranicu ili kolotaciju TINYBLOB 255 byteova maksimalno TINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name] BLOB[(M)] 65535 byteova maksimalno TEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]

16

Tipovi podataka - String


MEDIUMBLOB 16777215 (224) MEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name] LONGBLOB 4,294,967,295 or 4GB (232) LONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name] ENUM('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name] moe sadravati jednu od navedenih 65535 vrijednosti maksimalno SET('value1','value2',...) [CHARACTER SET charset_name] [COLLATE collation_name] moe sadravati odreeni broj vrijdnosti iz skupa od 65535 vrijednosti

17

Tipovi podataka Usporedba tipova podataka

18

Operatori
BETWEEN ... AND ... <=> =,>=,>,<,<=, != ili <> GREATEST() IN INTERVAL() IS NULL IS ISNULL() LEAST() LIKE NOT BETWEEN ... AND ... NOT IN NOT LIKE SOUNDS LIKE(v4.1.0) AND ili &&, OR ili || NOT ili ! RLIKE ili REGEXP CASE i IF Da li unutar zadanih okvira Usporedba sigurna u odnosu na NULL Vraa vei argument Da li je unutar okbira Vraa indeks elementa koji je manji od prvog argumenta Da li je NULL vrijednost Da li je true ili false za bool tip Da li je argument NULL vrijednost Vrati najmanji argument Jednsotavna usporedba stringova Negacija BETWEEN ... AND.... Negacija IN Ne zadovoljava jednostavnu usporedbu stringova Usporeivanje zvukova Logiko povezivanje Negacija Sloenija provjera da li je niz sadran u nizu Ostavimo za kasnije
19

Operatori prema prednosti


BINARY, COLLATE - pretvara nizove znakova u binarni niz ili kolotaciju ! - (unary minus), ~ (unary bit inversion) ^ (XOR) *, / ili DIV, % ili MOD -, + <<, >> & | =, <=>, >=, >, <=, <, <> ili !=, IS, LIKE, REGEXP, IN BETWEEN, CASE, WHEN, THEN, ELSE NOT && ili AND XOR || ili OR := Konverzija tipova podataka CAST() ili CONCAT() SELECT 38.8, CAST(38.8 AS CHAR); daje 38.8 '38.8'
20

10

String funkcije - usporedba


Niti jedna operacija dva stringa nije case sensitive ! LIKE Koristi se % kao zamjena za vie znakova i _ zamjena za jedan znak '10' LIKE '1%' ---> > istina '10' LIKE '1_' ---> > istina '100' LIKE '1%' ---> > istina '100' LIKE '1_' ---> > la 'Kokolo' LIKE 'ok%' ---> > la 'Kokolo' LIKE 'kok%' ---> > istina 'Dragutin' LIKE '_ragu%in' ---> > istina NOT LIKE suprotno od LIKE STRCMP kao C

21

String funkcije - usporedba


REGEXP Napredniji od LIKE: ^ - poetak niza, $ -kraj niza, . -zamjenjuje jedan znak, a* - niz 0 do a znakova za redom, a+ -niz 1 do a znakova za redom, a? - a se pojavljuje ili ne pojavljuje, de | abc - ili se pojavljuje de ili abc niz, (abc)* abc)* - pojavljivanje niza abc 0 ili vie puta .. ... . 'Bn' Bn' REGEXP '^ '^Ba Ba*n' *n' --->istina, >istina, 'Bn 'Bn'' REGEXP '^Ba '^Ba+n' +n' --->la >la

22

11

String funkcije - izvadak


ASCII(str) vraa ascii vrijednost znaka BIN(n) vraa binarnu vrijednost broja kao string BIT_LENGTH(str) vraa duljinu stringa u bitovima CHAR(number[,number]) vraa znak za ASCII vrijednost CHAR_LENGTH(str) ili LENGTH(str) vraa duljinu niza u znakovima CONCAT(str1,str2...) vraa string koji ine svi spojeni argumenti CONCAT_WS(separator str1,str2...) vraa string koji ine svi spojeni argumenti odvojeni separatorom FORMAT(X,D) X je format tipa #,###,###.## , D je broj decimalnih mjesta
23

String funkcije - izvadak


INSERT(str,pos, len, newstr) u sring se ubacuje string newstr na mjestup pos duljine len LCASE(str) ili LOWER(Str) ; UCASE(str) ili UPPER(str) smanjuje ; poveava sva slova u stringu LEFT(str, len) vraa string sastavljen od len znakova sa lijeve strane str REPLACE(str, from_str, toto-str) mijenja string str i to niz from_str mijenja u toto-str RIGHT(str,len) vraa string sastavljen od len znakova sa desne strane str, TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str) uklanja viak znakova remstr (ako ne pie podrazumijeva se razmak) sa lijeve (leading) , desne (trailing) ili obje(both) strane SUBSTRING(str,pos,len) ili SUBSTRING(str FROM pos FOR len) iz stringa vadi string od pozicije za duljinu len. duljina len je opcionalna SUBSTR i MID su sinonimi za SUBSTRING
24

12

Numerike funkcije - izvadak


Aritmetike funkcije + - * / (DIV) % (MOD) Matematike funkcije

zaokruuje na gornju vrijednost

exponent zaokruuje na donju vrijednost smanji broj decimalnih mjesta

25

Agregatne funkcije - izvadak


AVG([DISTINCT] expr) prosjena vrijednost atributa , DISTINCT uzima u obzir samo razliite atribute COUNT(expr) prebrojava broj ne NULL vrijednosti COUNT(DISTINCT expr,[expr...]) prebrojava broj ne NULL vrijednosti koje su razliite MIN([DISTINCT] expr), MAX([DISTINCT] expr) vraa minimalnu ili maksimalnu vrijednost u polju STD(expr) STDDEV(expr) standardna devijacija uzoraka SUM([DISTINCT] expr) suma [razliitih] vrijednosti u polju GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integer | col_name | expr} [ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
grupira i spaja rezultate neke druge naredbe... vratiti emo se kasnije....
26

13

Ostale funkcije
Specifike funkcije za enkripciju (SHA1, AES, DES) Funkcije za komunikaciju sa posluiteljem (CURRENT_USER; CONNECT_ID) Funkcije za rad sa bitovima Funkcije za zakljuavanje .... baze podataka II uglavnom specifine funkcije vezane za samu implementaciju posluitelja i baze

27

Data manipulation statement


SELECT
[ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr, ... [FROM table_references [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)] [INTO OUTFILE 'file_name' export_options | INTO DUMPFILE 'file_name' | INTO var_name [, var_name]] [FOR UPDATE | LOCK IN SHARE MODE]]
28

14

Uvjet kod SELECT SELECT-a


WHERE se koristi kad se eli ispisati samo one zapise koji su tono odreeni nekim uvjetom SQL WHERE Sintaksa
SELECT naziv_stupca(s) FROM ime_tablice WHERE naziv_stupca operator vrijednost

29

Operatori u WHERE dijelu


Operator = <> ili != > < >= <= BETWEEN LIKE IN Opis Jednako Razliito Vee od Manje od Vee ili jednako Manje ili jednako Izmeu sa ukljuenim rasponom Trai se ponavljanje uzorka Za tono te vrijednosti koje se trae
30

15

Primjer upita
Ispisati prva dva slova svih imena klijenata SELECT LEFT(imeKlijent,2) FROM klijent;

Ispisati zadnja dva slova svih imena klijenata SELECT RIGHT(imeKlijent,2) FROM klijent;

31

Projekcije - uvjeti
Vratimo se na projekcije , uvodimo kljunu rije WHERE
Ispiimo sve zapise iz tablice klijent imena 'Davor' SELECT * FROM klijent WHERE imeKlijent imeKlijent='Davor' ='Davor'

32

16

Projekcije - uvjeti
ispiimo sve zapise iz tablice mjesto iji je potanski broj 10000
SELECT * FROM mjesto WHERE pbrMjesto pbrMjesto=10000 =10000

33

Projekcije - uvjeti
Ispisati sve zapise iz mjesta iji je potanski broj izmeu 10000 i 20000
SELECT * FROM mjesto WHERE pbrMjesto pbrMjesto>10000 >10000 AND pbrMjesto<20000 pbrMjesto<20000 ili SELECT * FROM mjesto WHERE pbrMjesto BETWEEN 10001 AND 19999

34

17

Projekcije - uvjeti
Ispisati sve zapise iz tablice mjesto za koje ne vrijedi da je potanski broj izmeu 10000 i 20000
SELECT * FROM mjesto WHERE NOT(pbrMjesto NOT(pbrMjesto>10000 >10000 AND pbrMjesto<20000) pbrMjesto <20000) ili SELECT * FROM mjesto WHERE pbrMjesto NOT BETWEEN 10001 AND 19999

35

Projekcije - uvjeti
Ispisati sve zapise iz tablice mjesto za koje vrijedi da je potanski broj 10000 ili 10020 ili 20000
SELECT * FROM mjesto WHERE pbrMjesto pbrMjesto=10000 =10000 OR pbrMjesto=10020 pbrMjesto=10020 OR pbrMjesto=20000 pbrMjesto =20000 ili SELECT * FROM mjesto WHERE pbrMjesto IN(10000,10020,20000)

36

18

Projekcije - uvjeti
Ispisati sve zapise iz tablice radnik koji sadre niz 'do' u svom prezimenu SELECT * FROM radnik WHERE prezimeRadnik LIKE '%do%' ili SELECT * FROM radnik WHERE prezimeRadnik REGEXP 'do'

37

Projekcije - uvjeti
Ispisati sve zapise iz tablice radnik ije ime poinje sa Pe SELECT * FROM radnik WHERE prezimeRadnik LIKE ''Pe Pe%' %' ili SELECT * FROM radnik WHERE prezimeRadnik REGEXP '^Pe Pe'' ili SELECT * FROM radnik WHERE SUBSTRING(prezimeRadnik SUBSTRING(prezimeRadnik,1,2)=' ,1,2)='Pe Pe'' ili SELECT * FROM radnik WHERE LEFT(prezimeRadnik LEFT(prezimeRadnik,2)=' ,2)='Pe Pe''

38

19

Jo malo ponavljanja za labose


Od imena i prezimena klijenata napraviti e e-mail adrese sa nastavkom @tvz.hr @tvz.hr? ?
SELECT lcase lcase( (concat( concat(imeKlijent,".",prezimeKlijent imeKlijent,".",prezimeKlijent,"@ ,"@tvz.hr tvz.hr")) ")) FROM klijent; klijent ;

39

Jo malo ponavljanja za labose


Ispisati sve atribute iz tablice mjesto?
SELECT * FROM mjesto; ili
SELECT pbrMjesto, nazivMjesto, sifZupanija FROM mjesto;

40

20

Jo malo ponavljanja za labose


Ispisati atribut prezime radnika i sluajno generirani broj za sva prezimena radnika
SELECT prezimeRadnik, rand() FROM radnik;

41

Jo malo ponavljanja za labose


Izraunati standardnu devijaciju atributa kapacitetRadnika iz tablice radionica za sve ntorke. ntorke.
SELECT std std( (kapacitetRadnika) kapacitetRadnika) FROM radionica;

42

21

Jo malo ponavljanja za labose


Stvoriti tablicu mjesto i unijeti jedan zapis.
CREATE TABLE mjesto1 ( pbrMjesto int(11) DEFAULT NULL, nazivMjesto varchar(255) COLLATE cp1250_croatian_ci DEFAULT NULL, sifZupanija int(11) DEFAULT NULL, UNIQUE KEY nazivMjesto (`nazivMjesto`), UNIQUE KEY pbrMjesto (pbrMjesto) ) ENGINE=MyISAM DEFAULT CHARSET=cp1250 COLLATE=cp1250_croatian_ci; INSERT INTO mjesto1 VALUES ('00000043280','Garenica','7');

43

Jo malo ponavljanja za labose


Stvoriti tablicu mjesto i unijeti jedan zapis.
CREATE TABLE mjesto2 ( pbrMjesto int(11) ZEROFILL DEFAULT NULL, nazivMjesto varchar(255) COLLATE cp1250_croatian_ci DEFAULT NULL, sifZupanija int(11) DEFAULT NULL, UNIQUE KEY nazivMjesto (`nazivMjesto`), UNIQUE KEY pbrMjesto (pbrMjesto) ) ENGINE=MyISAM DEFAULT CHARSET=cp1250 COLLATE=cp1250_croatian_ci; INSERT INTO mjesto2 mjesto2 VALUES ('00000043280','Garenica','7');

44

22

Jo malo ponavljanja za labose


Izbrisati sve podatke iz tablica mjesto1 i mjesto2
DELETE FROM mjesto1; DELETE FROM mjesto2; mjesto2;

Izbrisati podatak iz tablice mjesto kod kojeg je potanski broj 43280


DELETE FROM mjesto WHERE pbrMjesto pbrMjesto=43280; =43280;

Obrisati tablice mjesto1 i mjesto2


DROP TABLE mjesto1; DROP TABLE mjesto2;

45

Projekcije
Izvucimo satiKvar i ispiimo satiKvara uvean za 3 za sve kvarove SELECT satiKvar, satiKvar+3 FROM kvar;

46

23

Projekcije - numerike funkcije


Uvodimo numerike funkcije
Koliko imamo klijenata u autoservisu? treba nam broj zapisa u tablici klijent SELECT COUNT(sifKlijent) FROM klijent; ili kolski SELECT COUNT(*) FROM klijent; ako neki atribut sadri NULL vrijednost tada po njemu smijemo raditi COUNT, i NULL vrijednosti e biti brojane budui da COUNT zbraja broj redova, a ne broj vrijednosti atributa

47

Projekcije - numerike funkcije


Kolika je suma svih satiKvar iz tablice kvar?
SELECT SUM(satiKvar SUM(satiKvar) ) FROM kvar;

48

24

Projekcije - numerike funkcije


Ispisati minimalnu vrijednost za satiKvar iz tablice kvar
SELECT MIN(satiKvar) FROM kvar;

49

Projekcije problemi sa agregatnim funkcijama


Ispisati naziv kvara i minimalnu vrijednost za satiKvar iz tablice kvar
SELECT nazivKvar nazivKvar,MIN( ,MIN(satiKvar satiKvar) ) FROM kvar; Ne moe se ispisati istovremeno jedan rezultat i cijela tablica!

50

25

Projekcije - string funkcije


Prelazimo na funkcije sa stringovima
Ispisati svako tree slovo imena za sva imena klijenata SELECT SUBSTRING(imeKlijent SUBSTRING(imeKlijent,3,1) ,3,1) FROM klijent;

51

Projekcije - string funkcije


Ispisati sve klijente tako da se ispie samo jedan atribut koji sadri ime i prezime klijenta odvojeno razmakom
SELECT CONCAT(imeKlijent,' ',prezimeKlijent) FROM klijent;

52

26

You might also like