1 Vježba 4: MySQL vježbe 1. Na C disku vašeg računala pronađite dolje navedene mape: a. xampp b. MySQL Workbench 2. Prvo otvorite xampp folder i pronađite xampp-control.exe, pokrenite control panel, te startajte Modul MySQL.
1
Vježba 4: MySQL vježbe
1. Na C disku vašeg računala pronađite dolje navedene mape:
a. xampp
b. MySQL Workbench
2. Prvo otvorite xampp folder i pronađite xampp-control.exe, pokrenite control panel, te startajte
Modul MySQL.
2
3. Nakon toga otvorite MySQL Workbench, pronađite MySQLWorkbench.exe, te ga pokrenite.
4. Nakon što ste pokrenuli MYSQL Workbench, kreirajte novu MySQL konekciju.
5. Pod Connection Name upišite MySQLEFOS, te zatim kliknite na Store in Vault …, te pod password
upišite lozinku koju vam asistent da.
3
6. Zatim kliknte na OK, Test Connection kako bi potvrdili da je konekcija ispravna, te na kraju kliknete
na završni OK.
7. Dva puta kliknite na novokreiranu konekciju.
8. Nakon toga bi vam se trebao prikazati SQL editor u kojemu će se kreirati baza i tablice.
9. Prvo ćemo provjeriti postoji li baza podataka s imenom efosexample1, te ako postoji neka se
obriše:
4
10. Nakon toga će se kreirati baza podataka s nazivom efosexample1:
11. Zatim će se početi koristiti kako bi se u njoj mogle kreirati tablice:
12. Za početak će se kreirati dvije tablice:
a. my_contacts
b. interests
13. Isto će se prvo postaviti provjera ako postoji tablica neka se obriše.
14. Tablica my_contacts sadržavati će sljedeća polja:
a. Naziv polja: contact_id
i. Tip polja: cijeli broj
ii. Ne smije biti prazan
iii. Autogenerirani broj
iv. Primarni ključ
b. Naziv polja: last_name
i. Tip polja: razni znakovi
ii. Veličina polja: 30
iii. Smije biti prazan
c. Naziv polja: first_name
i. Tip polja: razni znakovi
ii. Veličina polja: 20
iii. Smije biti prazan
d. Naziv polja: email
i. Tip polja: razni znakovi
ii. Veličina polja: 50
iii. Smije biti prazan
e. Naziv polja: gender
5
i. Tip polja: Znak
ii. Veličina polja: 1
iii. Smije biti prazan
f. Naziv polja: birthday
i. Tip polja: datum
ii. Smije biti prazan
g. Naziv polja: profession
i. Tip polja: razni znakovi
ii. Veličina polja: 50
iii. Smije biti prazan
h. Naziv polja: location
i. Tip polja: razni znakovi
ii. Veličina polja: 50
iii. Smije biti prazan
i. Naziv polja: contact_status
i. Tip polja: razni znakovi
ii. Veličina polja: 20
iii. Smije biti prazan
j. Naziv polja: interests
i. Tip polja: razni znakovi
ii. Veličina polja: 100
iii. Smije biti prazan
k. Naziv polja: seeking
i. Tip polja: razni znakovi
ii. Veličina polja: 50
iii. Smije biti prazan
6
15. Kreirajte nakon toga tablicu interests (slično kao i prethodnu tablicu).
16. Tablica interests sadržavati će sljedeća polja:
a. Naziv polja: interest_id
i. Tip polja: cijeli broj
ii. Ne smije biti prazan
iii. Autogenerirani broj
iv. Primarni ključ
b. Naziv polja: interest
i. Tip polja: razni znakovi
ii. Veličina polja: 50
iii. Smije biti prazan
17. Nakon kreiranja druge tablice, u tablicu my_contacts će se spremiti sljedeće vrijednosti:
a. last_name - 'Anderson'
b. first_name - 'Jillian'
c. email - 'jill_anderson@ \nbreakneckpizza.com'
d. gender - 'F'
7
e. birthday - '1980-09-05'
f. profession - 'Technical Writer'
g. location - 'Palo Alto, CA'
h. contact_status - 'single'
i. interests - 'kayaking, reptiles'
j. seeking - 'relationship, friends'
18. Nakon toga dodajte još ovih 15 redova u tablicu my_contacts (možete c/p):
INSERT INTO my_contacts (last_name,first_name,email,gender,birthday,profession,location, contact_status,interests,seeking) VALUES ('Kenton','Leo','[email protected]','M','1974-01-10','Manager','San Francisco, CA','divorced','women','women to date'); INSERT INTO my_contacts (last_name,first_name,email,gender,birthday,profession,location, contact_status,interests,seeking) VALUES ('McGavin','Darrin',' [email protected]','M','1966-01-23','Cruise Ship Captain','San Diego, CA','single','sailing, fishing, yachting','women for casual relationships'); INSERT INTO my_contacts (last_name,first_name,email,gender,birthday,profession,location, contact_status,interests,seeking) VALUES ('Franklin','Joe','[email protected]','M','1977-04-28','Software Sales','Dallas, TX','married','fishing, drinking','new job'); INSERT INTO my_contacts (last_name,first_name,email,gender,birthday,profession,location, contact_status,interests,seeking) VALUES ('Hamilton','Jamie','[email protected]','F','1964-09-10','System Administrator','Princeton, NJ','married','RPG','nothing'); INSERT INTO my_contacts (last_name,first_name,email,gender,birthday,profession,location, contact_status,interests,seeking) VALUES
8
('Chevrolet','Maurice','[email protected]','M','1962-07-01','Bookshop Owner','Mountain View, CA','married','collecting books, scuba diving','friends'); INSERT INTO my_contacts (last_name,first_name,email,gender,birthday,profession,location, contact_status,interests,seeking) VALUES ('Kroger','Renee','[email protected]','F','1976-12-03','Unemployed','San Francisco, CA','divorced','cooking','employment'); INSERT INTO my_contacts (last_name,first_name,email,gender,birthday,profession,location, contact_status,interests,seeking) VALUES ('Mendoza','Angelina','[email protected]','F','1979-08-19','UNIX Sysadmin','San Francisco, CA','married','acting, dancing','new job'); INSERT INTO my_contacts (last_name,first_name,email,gender,birthday,profession,location, contact_status,interests,seeking) VALUES ('Murphy','Donald','[email protected]','M','1967-01-23','Computer Programmer','New York City, NY','committed relationsh','RPG, anime','friends'); INSERT INTO my_contacts (last_name,first_name,email,gender,birthday,profession,location, contact_status,interests,seeking) VALUES ('Spatner','John','[email protected]','M','1963-04-18','Salesman','Woodstock, NY','married','poetry, screenwriting','nothing'); INSERT INTO my_contacts (last_name,first_name,email,gender,birthday,profession,location, contact_status,interests,seeking) VALUES ('Toth','Anne','[email protected]','F','1969-11-18', 'Artist','San Fran, CA', 'married','poetry, screenwriting','nothing'); INSERT INTO my_contacts (last_name,first_name,email,gender,birthday,profession,location, contact_status,interests,seeking) VALUES ('Manson','Anne','[email protected]','F','1977-08-09', 'Baker','Seattle, WA', 'divorced','cooking','employment'); INSERT INTO my_contacts (last_name,first_name,email,gender,birthday,profession,location, contact_status,interests,seeking) VALUES ('Hardy','Anne','[email protected]','F','1963-04-18', 'Teacher','San Fran, CA', 'married','fishing, drinking','new job'); INSERT INTO my_contacts (last_name,first_name,email,gender,birthday,profession,location) VALUES ('Parker','Anne','[email protected]','F','1983-01-10', 'Student','San Fran, CA'); INSERT INTO my_contacts (last_name,first_name,email,gender,birthday,profession,location) VALUES ('Blunt','Anne','[email protected]','F','1959-10-09', 'Web Designer','San Fran, CA'); INSERT INTO my_contacts (last_name,first_name,email,gender,birthday,profession,location) VALUES ('Jacobs','Anne','[email protected]','F','1968-02-05', 'Computer Programmer','San Jose, CA');
19. Na kraju treba provjeriti jesu li ti podaci zbilja unijeti, pisanjem SQL naredbe za prikaz podataka
iz tablice my_contacts.
20. Nakon što ste sve napravili, pritisnite ikonicu groma .
9
Kreiranje procedura
1. Tablica my_contacts je ispunjena podacima. Nakon nje treba ispuniti podacima i tablicu interests
s interesima koji se nalaze u tablici my_contacts, ali s iznimkom da svaki interest bude u zasebnom
redu.
2. Otvorite novi tab s SQL editorom klikom na:
3. Nakon toga upišite naredbu tako da prikažete first_name, last_name i interests iz tablice
my_contacts.
10
4. Problem predstavlja što u jednom redu postoji 2 ili 3 interesa, ti interesi se moraju odvojiti, te jedan
po jedan spremiti u tablicu interests. To će se postići kreiranjem procedure koja će sve te radnje
obaviti njenim izvršavanjem. Procedura koja se kreira će se zvati spUtilSplitInterests.
5. Otvorite novi tab, te isto kao i kod tablica prvo će se vršiti provjera postoji li ta procedura, te ako
postoji treba je obrisati.
6. Nakon toga kreira se procedura s dva ulazna parametra.
11
7. Na početku MySQL procedure se uvijek deklariraju varijable, te će se tako učiniti i sada. Deklarirati
će se cjelobrojna varijabla FC i postaviti na -1.
8. Zatim će se kreirati petlja koja će se izvršavati kod god ima i jednog znaka u varijabli SplitString.
12
9. Sada treba pronaći prvi zarez u varijabli SplitString i staviti tu poziciju u varijablu FC.
10. Nakon pronalaska zareza, treba izvršiti provjeru ovisno na kojoj je poziciji zarez s if…else uvjetom.
NAPOMENA: Ako je zarez na nultoj (0) poziciji, to znači da je ostala samo još jedna riječ.
13
11. Ako je zarez na nultoj poziciji (FC = 0) i LENGTH SplitString varijable veći od 0, treba insertati
SplitString varijablu u tablicu interests, te izaći iz petlje.
14
12. Ako je FC veće od 1 vrati FC - 1 broj znakova s lijeve strane. Npr. FC je 8, FC-1 je 7, string je 'sailing,
fishing, yachting' i vraca 7 znakova s lijeve strane tj. sailing; zatim vrati LENGTH SplitStringa (26),
odzmi FC (8) te s (26-8 = 18) 18 znakova s desne strane napuni varijablu SplitString, tim nova
vrijednost je ' fishing, yachting'.
15
13. Na kraju ostao je ELSE koji pokriva zapravo ako FC nije jednako 0 i nije veće od 1.
16
14. Za kraj je ostalo samo obrisati duple vrijednosti.
17
15. Nakon kreiranja procedure koja će rastavljati string, narpaviti će se još jedna procedura koja će
selectirati intersets iz tablice my_contacts (SELECT c.interests FROM my_contacts c;) i jednu po
jednu vrijednost/red predavati proceduri spUtilSplitInterests.
18
16. Nova procedura koja će se kreirati, zvati će se spFillInterests i sadržavati će CURSOR u sebi.
17. Opet će se prvo provjeriti postoji li procedura, te ako postoji neka se obriše, a zatim neka se kreira.
18. Kao što je vidljivo, procedura nema ni jedan ulazni parametar.
19. Nakon toga treba deklarirati cursor u proceduri:
19
20. Ispod komentara exec proc treba pozvati proceduru
spUtilSplitInterests(SplitString, DelimiterChar), te joj predati varijablu l_interests za prvi
parametar, a za drugi zarez ','.
20
21. Još samo nakon zatvorenog cursora selectirati će se interest-i iz tablice interests.
21
NAPOMENA: Obavezno COMMIT narpaviti.
22. Kliknite na grom kako bi kreirali proceduru.
23. Na kraju samo treba pozvati proceduru spFillInterests.
24. Rezultat pozivanja:
22
23
Kreiranje relacija
1. Nakon što ste kreirali tablice, umetnuli podatke, te ih zatim i prikazali; kreirati će se još jedna tablica
(contact_interest)koja će povezati tablice my_contacts i interests insertajući selectirane primarne
ključeve tih dviju tablica u novo kreiranu tablicu kao strane ključeve.
2. Otvorite novi tab s SQL editorom. Pošto će se raditi strani ključevi prvo će se isključiti njihova
provjera.
3. Opet, napravite provjeru postoji li tablica contact_interest, te ako postoji neka se obriše. Nakon
toga treba CREATE.
4. Tablica contact_interest sadržavati će sljedeća polja:
a. Naziv polja: contact_interest_id
i. Tip polja: cijeli broj
ii. Ne smije biti prazan
iii. Autogenerirani broj
iv. Primarni ključ (PK)
b. Naziv polja: contact_id
i. Tip polja: cijeli broj
ii. Ne smije biti prazan
iii. Strani ključ (FK) – referenca tablica my_contacts
c. Naziv polja: interest_id
i. Tip polja: cijeli broj
ii. Ne smije biti prazan
iii. Strani ključ (FK) – referenca tablica interests
24
5. Sada treba odmah prilikom kreiranja tablice insertirati c.contact_id, i.interest_id iz interests i,
my_contacts c tablica. To će se učiniti pomoću SELECT-a.
6. Nakon toga treba još uključiti provjeru stranih ključeva.
25
7. Pritisnite grom kako biste napravili tablicu i u nju unijeli vrijednosti.
8. Provjerite postoje li u tablici vrijednosti, selectirajući sve iz tablice contact_interest.
26
9. Zatim odite ponovno na glavni prozor MySQL WorkBencha .
10. Na dnu prozora kod modelsa kliknite na veće od(>).
11. Zatim odaberite vašu konekciju i Next, Next.
27
12. Odaberite vašu bazu efosexample1, te Next, Next, Execute. Nakon toga još treba Next i Finish.
13. Trebali biste dobiti relacijski model vaše baze podataka.
28
29
Samostalni zadaci
SQL JOINs
U danom primjeru dohvaćaju se sve vrijednosti iz tablica my_contacts i contact_interest gdje je
jednaka vrijednost u polju contact_id.
1. Kako biste dohvatili sve vrijednosti iz tablica interests i contact_interest gdje je jednaka vrijednost
u polju interest_id. Napišite upit.
2. Kako biste dohvatili sve vrijednosti iz tablice interests, a samo vrijednosti iz tablice
contact_interest gdje je jednaka vrijednost u polju interest_id. Napišite upit.
30
SQL WHERE
3. Dohvatite first_name, last_name iz tablice my_contacts čiji je gender 'M'. Napišite upit.
4. Dohvatite first_name, last_name iz tablice my_contacts čiji je gender 'M' i contact_status
'married'. Napišite upit.
SQL WHERE i JOIN
5. Dohvatite first_name, last_name, interests iz tablice my_contacts čiji je interest_id jednak broju
10.