Visoka škola strukovnih studija za
informacione i komunikacione tehnologije Kreiranje baze podataka
Beograd
• Nakon prijave na MySQL server, u komandnoj liniji
treba kucati naredbu za kreiranje baze podataka
MySQL & SQL server CREATE DATABASE IMEBAZE;
Ako se kreira baza "knjige"
Kreiranje baze podataka Odgovor:
Query OK, 1 row affected
označava da je proces uspešno
obavljen.
Dr Nenad Kojić
Kreiranje tabele baze podataka Primer kreiranja tabele
• Nakon kreiranja baze treba kreirati njene tabele. mysql> use knjige
Svaka tabela se posebno definiše. Sintaksa je: create table kupci (
CREATE TABLE imetabele (kolone); IDkupca int unsigned not null auto_increment primary key,
ime char(50) not null,
grad char(30) not null,
• Ime tabele definiše svaku od tabela, dok kolone koje
naslov char(100),
ta tabela sadrži treba nabrajati jednu iza druge i
iznos float(5,2),
imena odvajati zarezima.
kolicina tinyint unsigned,
• Svaka kolona treba da sadrži ime i tip podataka u opis text,
njoj. datum date not null
);
Greska u kucanju
Prikaz informacija o bazi Prikaz informacija o tabeli
• SHOW TABLES - komanda prikazuje sve kreirane • DESCRIBE imetabele - Precizno prikazuje sve
tabele u bazi podataka na koju je izvršena prijava informacije za traženu tabelu u bazi
• SHOW DATABASES - prikazuje spisak svih baza na
serveru
Izrada indeksa Unošenje podataka u bazu 1
• Ako se u toku rada zahteva veliki broj pretraga po • Unošenje podataka vrši se naredbom INSERT
koloni koja nije indeksirana, onda će se poboljšanje – Sintaksa naredbe:
performansi poboljšati dodavanjem indeksa za tu INSERT [INTO] tabela [(kolona1, kolona2, kolona3, ...)]
VALUES(vrednost1, vrednost2, vrednost3, ...);
kolonu.
• Vrednosti kolona pisati pod znacima ' ili ", sem ako su brojevi ili
CREATE [UNIQUE|FULLTEXT] INDEX imeindeksa datumi.
ON imetabele (imekolone [(broj)] [ASC|DESC], ... ); – Ako se upisuje ceo red (sve kolone) sintaksa je:
INSERT [INTO] tabela
– Broj je opcioni parametar i služi za indeksiranje samo prvih n znakova u VALUES(vrednost1, vrednost2, vrednost3, ...);
polju.
– [ASC|DESC] definišu da li je indeksiranje izvršeno rastućim ili Primer:
opadajućim redosledom. Inicijalno je rastući.
insert into kupci values (NULL, 'Pera Peric', 'Beograd', 'Svet oko nas', 2000, 1,
'knjiga za decu', 2007-03-01);
Unošenje podataka u bazu 2 Unošenje podataka u bazu 3
• Upis se može vršiti i za pojedine kolone proizvoljnim • U tabelu se može uneti i više redova odjednom
Primer:
redosledom
Primer: insert into kupci values
(2, 'Pera Peric', 'Beograd', 'Svet oko nas', 2000, 1, 'knjiga za decu', '2007-03-01') ,
insert into kupci (naslov, kolicina, grad) values ('Mali princ', 2, 'Vranje',); (3, 'Mile Vasic', 'Sabac', 'Geografija', 2500, 2, 'knjiga za omladinu', '2007-03-05') ,
(4, 'Ana Savic', 'Valjevo', 'Bukvar', 1500, 1, 'knjiga za decu', '2007-03-15') ;
• Isti efekat dobija se primenom set-a kao • Insert low_priority - privremeno zaustavljanje sa
Primer:
umetanjem novog reda dok se ne završe tekuća čitanja
insert into kupci
set naslov= 'Mali princ', kolicina= 2, grad= 'Vranje' ; • Insert delayed. low_priority - smeštanje podataka za
• Ako je kolona definisana kao auto_increment, tada je kod umetanje u keš, i zadrška dok se server ne rastereti.
upisa,dovoljno samo prvi put, definisati njenu vrednost
Čitanje podataka iz baze Čitanje pomoću select - from
• Naredba za čitanje je SELECT sa sintaksom: • Čitanje sadržaja kolona ime i grad iz tabele kupci
Primer:
SELECT podaci FROM tabele
select ime, grad from kupci ;
[WHERE uslovi] [GROUP BY grupisanje]
[HAVING uslovgrupe] [ORDER BY redosled]
• Čitanje svih kolona iz tabele
[LIMIT ograničenja]
Primer:
[PROCEDURE imeprocedure(argumenti)]
select * from kupci ;
[načinzaključavanja];
Čitanje pomoću select - where Čitanje podataka iz više tabela istovremeno
• Za izdvajanje dela podataka sa uslovom treba • Ukoliko se želi pročitati više podataka iz različitih tabela,
koristiti where pa uslov pretrage a koji su na bilo koji način povezani, potrebno je izvršiti
Primer:
spajanje tabela.
• Za dve tabele naći sve porudžbine Pere Perića
select * from kupci
where grad = 'Vranje' ;
Kombinacija uslova Tabela Kolone
select * from kupci Kupci ID kupca Ime Adresa Grad
where grad = 'Vranje' Narudzbine ID narudzibe ID kupca Iznos Datum
or|and ime='Pera Peric';
Primer:
• Operatori za poređenje su: =,<,>,>=,<=, !=, is not select narudzbine.iznos, narudzbine.datum from kupci, narudzbine
null, is null, between, in, not in, like, not like ... where kupci.ime = 'Pera Peric' and kupci.IDkupca = narudzbine.IDkupca;
Uslov spajanja je kupci.IDkupca = narudzbine.ID kupca, može biti i van baze npr
baza4.nesto1.IDnesto1 = baza2.nesto3.IDnesto3
Spajanje više od dve kolone Levi spojevi (left join)
• Koji kupci su naručuli knjigu Baze (ISBN = 222333) • Najčešće se koristi za slučajeve kada nema preklapanja između podataka
(Naći klijente koji ništa nisu kupili !)
Tabela Kolone
Kupci ID kupca Ime Adresa Grad • Def: Ako se prilikom spajanja redova dve tabele, u desnoj tabeli ne nađe
ID red, koji bi odgovarao redu u levoj tabeli, skupu rezultata se dodaje red,
Narudzbine narudzibene ID kupca Iznos Datum koji umesto vrednosti kolone na desnoj strani, sadrži vrednost NULL.
ID
Proizvodi narudzibene ISBN broj Količina • Sintaksa sadrži rezervisanu reč left join i on
Knjige ISBN broj Autor Naslov Cena
Primer:
select kupci.ime from kupci, narudzbine, proizvodi, knjige
where kupci. ID kupca = narudzbine. ID kupca and narudzbine. ID narudzibe =
proizvodi.IDnarudzbine and proizvodi.ISBN broj = knjige.ISBN broj and
knjige.naslov like ' %Baze% ' ;
Def: Broj uslova za spajanje tabela je za jedan manji od broja tabela, jer je za spajanje
dve tabele potreban jedan uslov.
Primer levog spajanja 1 Primer levog spajanja 2
• Za datu bazu napisati kod kojim se pretražuju korisnici u • Ako se traže korisnici koji ništa nisu kupili, tada treba naći
odnosu na broj narudžbenica. Tabela sa desne vrednosti NULL u novodobijenoj koloni, i dati odgovarajuće
Kupci
Primer: strane ime korisnika
ID Kupca Ime Adresa Grad
Narodnih
1 Mile Vasic heroja 1 select kupci.ID kupca, kupci.ime,
ID Kupci Ime ID Narudzbine Primer:
2 Milos Peric Avijaticara 7 Leskovac narudzbine.ID narudzibe 1 Mile Vasic NULL
3 Jovan Jovic Ovcasrska 55 Arilje
from kupci left join narudzbine 2 Milos Peric NULL
4 Ana Senic Havajska 5 Bor select kupci.ID kupca, kupci.ime,
on kupci. ID kupca = narudzbine. ID kupca; 3 Jovan Jovic 2
5 Milena Ilic Nade Puric 4 Zajecar from kupci left join narudzbine
4 Ana Senic 3
Tabela sa leve 5 Milena Ilic 1
strane 5 Milena Ilic 4
using (ID kupca)
where narudzbine. IDnarudzbine is NULL;
Narudzbine ID Kupci Ime ID Narudzbine
ID Narudzbine ID Kupca Iznos Datum 1 Mile Vasic NULL
1 5 6500 2007-01-05 2 Milos Peric NULL
2 3 4800 2007-01-12 3 Jovan Jovic 2 ID Kupci Ime
3 4 7300 2007-02-07 4 Ana Senic 3 Upotrebom USING ne navodi se tabela iz koje dolazi 1 Mile Vasic
4 5 2100 2007-02-19 5 Milena Ilic 1 zajednička kolona. U tom slučaju mora postojati kolona 2 Milos Peric
5 Milena Ilic 4 sa istim imenom u obe tabele.
Upotreba ALIJASA Alijasi za sopstveno spajanje
• Alijasi su druga imena koja se dodeljuju privremeno • Alijasi su obavezni kada treba spojiti tabelu samu sa sobom.
Ovo je potrebno ako se traže redovi sa istim vrednostima u
ili trajno postojećim kolonama. Najčešće se koriste nekoj koloni.
kao skraćena imena. • Naći sve kupce koji žive u istom gradu
Primer:
select k.ime, Primer:
from kupci as k, narudzbine as n, proizvodi as p, knjige as knj
where k.ID kupca = n.ID kupca and n.ID narudzbine= p.ID narudzbine and select k1.ime, k1.grad, k2.ime,
n.ISBN = knj.ISBN and knj.naslov like ' %Baze% "; from kupci as k1, kupci as k2
where k1.grad = k2.grad and k1.ime != k2.ime;
Primer:
select kupci.ime from kupci, narudzbine, proizvodi, knjige Ovim uslovom se definiše da isti kupac, koji je u
where kupci. ID kupca = narudzbine. ID kupca and narudzbine. ID narudzibe = obe tabele, ne bude pronađen više puta.
proizvodi.IDnarudzbine and proizvodi.ISBN broj = knjige.ISBN broj and Može postojati samo jedno ime za taj grad !!!
knjige.naslov like ' %Baze% ' ;
Učitavanje po redosledu Grupne funkcije
• Ako se redovi koje treba prikazati kao rezultat upita žele • Grupne funkcije se primenjuju na grupisane podatke (više
sortirati koristi se naredba ORDER BY. kolona ili redova u kolonama)
• Vrednosti se sortiraju od a ka z, i od 1 na više, dok se za • Neke grupne funkcije su:
promenu koristi rezervisana reč DESC.
Naziv Opis
AVG (kolona) Prosečna vrednost kolone
Primer: Primer: Ako je navedena kolona daje broj elemenata u koloni bez NULL, a ako se
COUNT (stavke) ispred naredbe doda DISTINCT dobije se broj jedinstvenih vrednosti u
select ime, adresa, grad select ime, adresa, grad koloni.
from kupci from kupci MIN (kolona) Minimalne vrednost kolone
order by ime; order by ime desc; MAX (kolona) Maksimalna vrednost kolone
Ime Adresa Grad Ime Adresa Grad SUM (kolona) Zbir vrednosti u koloni
Ana Senic Havajska 5 Bor Milos Peric Avijaticara 7 Leskovac
Jovan Jovic Ovcasrska 55 Arilje Milena Ilic Nade Puric 4 Zajecar
Mile Vasic Narodnih heroja 1 Mile Vasic Narodnih heroja 1
Milena Ilic Nade Puric 4 Zajecar Jovan Jovic Ovcasrska 55 Arilje
Milos Peric Avijaticara 7 Leskovac Ana Senic Havajska 5 Bor
Primeri grupnih funkcija Izbor redova koje upit treba da vrati
• Izračunavanje srednje vrednosti porudžbina
Primer:
avg (iznos) • Naredbom LIMIT definiše se koji redovi ( počev od
select avg(iznos)
from narudžbine; 5175 kog i koliko njih) treba da budu vraćeni na zahtevani
Izračunavanje srednje vrednosti porudžbina po upit.
određenim grupama dobija se grupisanjem po određenoj • Prvi red ima redni broj 0
kategoriji
ID kupca avg (iznos)
• Ako se želi prikaz prvih 10 imena, tada je kod
Primer:
1 4800 Primer:
select IDkupca, avg(iznos)
from narudžbine; 2 7300 select name
group by IDkupca 3 4300 from kupci;
limit 0, 10;
Traženje porudžbina koje premašuju vrednost 4500
Primer: Prikaz 5,6,7,8 i 9-og reda bi bio
ID kupca avg (iznos) Primer:
select IDkupca, avg(iznos)
from narudžbine; 1 4800 select name
group by IDkupca 2 7300 from kupci;
having avg(iznos) > 4500; limit 4, 5;
Podupiti (subquery) Podupiti koji vraćaju redove
• Podupit je upit unutar upita • Podupiti najčešće vraćaju neku logičku promenljivu True ili
• Koristi se kada se rezultat jednog upita poredi u uslovu drugog False, jer su rezultat nekog poređenja.
upita. • Podupit može da vrati i ceo red
Vraća se ID ID kupca iznos
Primer: • Ovo je najčešći slučaj kada treba naći sve redove jedne tabele
select IDkupca, iznos kupca koji ima 2 7300
najveći iznos koji postoje i u drugoj
from narudzbine;
where iznos= (select max(iznos) from narudzbine);
Podupit koji traži Primer:
maksimalnu vrednost u
• Operatori za podupite koloni iznos select k1, k2, k3
from tabela1;
where (k1, k2, k3) in (select k1, k2, k3 from tabela2);
Ažuriranje zapisa u bazi Naknadne izmene strukture tabela
• Često postoji potreba za promenom podataka u bazi
(cena artikla, pdv, adresa...)
• Iskaz UPDATE i njegova sintaksa su:
Primer:
UPDATE imetabele
Set kolona1=izraz1, kolona2=izraz2, ...
[Where uslovi]
[ORDER by redosled]
[Limit broj]
Primer povećanja cene knjiga za 10%:
update knjige
set cena=cena*1.1;
Primer promene adrese kupca:
update kupci
set adresa = ' Bulevar mira 12'
where IDkupca = 3;
Primer izmene strukture tabela Brisanje Odlaganje do rasterećenja
• Brisanje zapisa (redova) - Delete Ubrzavanje postupka
Sintaksa:
Primer:
DELETE [low_priority] [quit] [ignore] from imetabele
•Promena tipa podatka u koloni tako da prihvata imena max dužine 90 karaktera Izvršenja promene bez
[WHERE uslov]
obaveštenja
[ORDER BY kolone]
alter table kupci Uslov pod kojim se briše
[LIMIT broj]
modify ime char(90) not null;
Grupisanje kolona
Primer:
•Dodavanje nove kolone (pdv) iza kolone iznos u tabeli porudžbine Broj redova koji se brišu
DELETE from kupci
WHERE ime='Pera';
alter table porudzbine • Brisanje tabela - Drop
add pdv float (5,2) after iznos
•Brisanje kolone pdv Primer:
DROP TABELE (naziv tabele koja se briše);
alter table porudzbine • Brisanje cele baze podataka - Drop
drop pdv;
Primer:
DROP DATABASE (naziv baze podataka koja se briše);
Visoka škola strukovnih studija za
DDL i DML informacione i komunikacione tehnologije
Beograd
• DDL - Data Definition Language je jezik za
definisanje podataka i odnosi se na naredbu
Create Table.
• DML - Data Manipulation Language je jezik za
MySQL & SQL server
manipulisanje podacima, i odnosi se na
naredbe Select, Update, Insert i Delete.
• QML - Query Manipulation Language je jezik Kreiranje baze podataka
za manipulisanje upitima i odnosi se na
naredbu Select
Dr Nenad Kojić