Professional Documents
Culture Documents
Baze 2.klk
Baze 2.klk
Zad 3 Recimo da fakultet odluci svim nastavnicima udvostruciti placu od iduce godine. Ispisite kolike ce biti place nastavnika iduce
godine.
SELECT PREZIMEN,PLACA*2 FROM NASTAVNIK; //naravno, imamo i +, -, /, ()
Zad 5 Ispisati sve podatke o nastavnicima iz sobe 127. Ispisati imena nastavnika s placom vecom od 10 000. Ispisati imena nastavnika
koji ne sjede u sobi 315.
a) SELECT * FROM NASTAVNIK WHERE BRSOBE=127; // * znai sve
b) SELECT IMEN FROM NASTAVNIK WHERE PLACA>10000;
c) SELECT IMEN FROM NASTAVNIK WHERE BRSOBE!=315;
Zad 6 Ispisati sve podatke o nastavnicima koji sjede u sobi 127 ili 315. Ispisati sve podatke o nastavnicima koji ne sjede ni u sobi 127
ni u sobi 315.
a) SELECT * FROM NASTAVNIK WHERE BRSOBE=127 OR BRSOBE=315; ili SELECT * FROM NASTAVNIK WHERE BRSOBE IN(127,315);
b) SELECT * FROM NASTAVNIK WHERE BRSOBE!=127 AND BRSOBE!=315; ili ... WHERE BRSOBE NOT IN(127, 315);
Zad 7 Ispisati sve podatke o nastavnicima koji zaradjuju izmedju 10 000 i 12 000 (ukljucivo). Ispisati sve podatke o nastavnicima koji
zaradjuju manje od 9 000 ili vise od 11 000.
a) SELECT * FROM NASTAVNIK WHERE PLACA >= 10000 AND PLACA <= 12000; ili SELECT * FROM NASTAVNIK WHERE
PLACA BETWEEN 10000 AND 12000; // NOT BETWEEN je stroga nejednakost
b) SELECT * FROM NASTAVNIK WHERE PLACA > 11000 OR PLACA < 9000 ili .... WHERE PLACA NOT BETWEEN 9000 AND 11000;
Zad 8 Ispisati JMBAG-ove svih studenata koji su iz kolegija sa sifrom 72001 dobili ocjenu izmedju 3 i 5. Ispisati JMBAG-ove studenata
koji su bar iz jednog kolegija dobili ocjenu izmedju 3 i 5.
a) SELECT JMBAG FROM UPISAO WHERE SIFRA=72001 AND OCJENA BETWEEN 3 AND 5;
b) SELECT DISTINCT JMBAG FROM UPISAO WHERE OCJENA BETWEEN 3 AND 5;
Zad 9 Ispisi imena studenata koja pocinju slovom 'M', zatim sva imena studenata u kojima se pojavljuje niz znakova 'ar'. Na kraju,
ispisati imena studenata kojima se kao trece slovo pojavljuje 'a'.
a) SELECT IMES FROM STUDENT WHERE IMES BETWEEN 'M' AND 'N'; ili (korektniji nain:) SELECT IMES FROM STUDENT WHERE
IMES LIKE 'M%'; // %=0, 1 ili vie znakova
b) SELECT IMES FROM STUDENT WHERE IMES LIKE '%ar%';
c) SELECT IMES FROM STUDENT WHERE IMES LIKE '__a%'; // _ zamjenjuje tono jedan znak
Zad 10 Ispisati podatke o nastavnicima, uzlazno sortirane po placi. Ispisati sve podatke o nastavnicima, silazno sortirano po placi.
a) SELECT * FROM NASTAVNIK ORDER BY PLACA ASC; // ASC= ulazno, to je default pa ne moramo pisati
b) SELECT * FROM NASTAVNIK ORDER BY PLACA DESC; // DESC= silazno
Zad 11 Ispisite prezimena studenata rodjenih 1992 godine, koji su na 1. godini studija. Ispis treba biti abecedno sortiran po
prezimenima.
SELECT PREZIMES FROM STUDENT WHERE DATR LIKE '1992%' AND GODINA=1 ORDER BY PREZIMES; // datum roenja je oblika
godina, mjesec, dan
// kako umjesto DATR napisati DATUM RODENJA u tablici? ovako:
SELECT PREZIMES PREZIME_STUDENTA, DATR DATUM_RODJENJA FROM STUDENT;
Zad 12 Ispisati podatke o nastavnicima koji zaradjuju izmedju 10 000 i 12 000, tako da im prezimena budu sortirana po abecedi. Ispisati
podatke o svim nastavnicima, sortirano po sobama, s time da nastavnici iz iste sobe slijede abecedno poredani po prezimenima.
a) SELECT * FROM NASTAVNIK WHERE PLACA BETWEEN 10000 AND 12000 ORDER BY PREZIMEN;
b) SELECT * FROM NASTAVNIK ORDER BY BRSOBE, PREZIMEN; // mogu dodat DESC iza BRSOBE
CREATE TABLE NA (OIB NUMERIC(11) UNSIGNED NOT NULL, PREZIMEN CHAR(20), IMEN CHAR(20), BRSOBE NUMERIC(3) UNSIGNED,
PLACA NUMERIC(5) UNSIGNED, PRIMARY KEY(OIB));
CREATE TABLE PR (SIFRA NUMERIC(5) UNSIGNED NOT NULL, NASLOV CHAR(80), OIB NUMERIC(11) UNSIGNED, SEMESTAR
ENUM('Z','L'), ECTS NUMERIC(2) UNSIGNED, PRIMARY KEY(SIFRA));
CREATE TABLE UP (JMBAG NUMERIC(10) UNSIGNED NOT NULL, SIFRA NUMERIC(5) UNSIGNED NOT NULL, DATU DATE, OCJENA
ENUM('1','2','3','4','5'), PRIMARY KEY(JMBAG,SIFRA));
Zad 16 U direktoriju /math/karaga/baze nalaze se datoteke s podacima za demo bazu. Jedna datoteka odgovara jednoj tabeli, jedan
redak datoteke jednoj n-torki. Vrijednosti atributa razdvojene su znakovima tab. Imena datoteka su datanastavnik i datapredmet.
Inicijalizirajte sadrzaj za vlastite tabele NASTAVNIK i PREDMET t. d. ucitate podatke iz odgovarajucih datoteka.
LOAD DATA INFILE "../../../../math/karaga/baze/datanastavnik" INTO TABLE NASTAVNIK; // umjesto NASTAVNIK mi napisali NA ;)
LOAD DATA INFILE "../../../../math/karaga/baze/datapredmet" INTO TABLE PR;
Zad 17 Inicijalizirajte sadrzaj za vlastite tabele UPISAO i STUDENT t. d. prepisete podatke iz odgovarajucih tabela demo baze "fakultet".
INSERT INTO ST SELECT * FROM fakultet.STUDENT;
INSERT INTO UP SELECT * FROM fakultet.UPISAO;
Zad 18 Upisite u bazu novog nastavnika s OIB-om 50000000000, prezimenom Mirkovic, imenom Mirko, koji ce sjediti u sobi 101 i imati
ce placu 8000 kuna.
1.nain
INSERT INTO NA VALUES(50000000000, 'Mirkovic', 'Mirko', 101, 8000);
isti redosljed atributa kao u tablici // to je loe jer trebamo pamtiti redosljed u tablici :(
2.nain
INSERT INTO NA (PREZIMEN, IMEN, PLACA, BRSOBE, OIB) VALUE ('Mirkovic, 'Mirko', 8000, 101, 50000000000);
u redosljedu navedeno tu na poetku :)
3.nain
INSERT INTO NA SET PLACA=8000, BRSOBE=101, IMEN='Mirko', PREZIMEN='Mirkovic', OIB=50000000000;
ne moramo paziti na redosljed, a i smijemo izostaviti neke atribute - oni se postavljaju automatski na NULL (sve osim kljua)
Zad 19 Realizirajte situaciju u kojoj je nastavnik s OIB-om 44102179316 (Klein) dobio otkaz. Sve njegove kolegije preuzima nastavnik s
OIB-om 50000000000 (Mirkovic).
prvo mijenjamo predmet td OIB od kleina zamijenimo s OIBom od mirkovia
UPDATE PR SET OIB=50000000000 WHERE OIB=44102179316;
sad briemo kleina
DELETE FROM NA WHERE OIB=44102179316;
Zad 20 Nastavnika Pascala premjestite u sobu 201 i dajte mu povisicu u visini 20% dosadasnje place.
UPDATE NA SET BRSOBE=201, PLACA=PLACA*1.2 WHERE PREZIMEN='Pascal'; // to moemo jer imamo samo jednog Pascala
Indeksi su pomone strukture na atributima koji ubrzavaju pretraivanje po tim atributima. Dodatno, unique indeks na kljuu osigurava i "svojstvo
kljua" (tj. da ne moemo imati vie unosa s istom vrijednou kljua)
Zad 25 Stvorite indekse kojima se ubrzava: trazenje studenata na zadanoj godini, trazenje nastavnika koji sjede u zadanoj sobi.
CREATE INDEX SG ON ST(GODINA);
CREATE INDEX NS ON NA(BRSOBE);
NAPOMENA:
SHOW INDEX FROM imetablice; // ispisuje sve indexe koji su na nekoj tablici
DROP INDEX ime ON TABLE imet;
DROP TABLE imet; // brisanje tablice
ALTER TABLE // promijeni ve stvorenu tablicu ali bolje DROP TABLE pa sve ispoetka
Zad 1 Ispisati listu imena studenata zajedno s naslovima kolegija koje su oni upisali. Ispisati naslove onih kolegija koje je upisao
student Vukovic Janko.
// Trebaju mi tablice STUDENT, PREDMET i UPISAO (jer upisao povezuje ova dva)
// pazi, imamo 2 OIBa (iz nastavnika i iz predmeta, morat emo tu paziti)
a) SELECT STUDENT.IMES, PREDMET.NASLOV FROM STUDENT, UPISAO, PREDMET WHERE STUDENT.JMBAG=UPISAO.JMBAG AND
UPISAO.SIFRA=PREDMET.SIFRA;
b) SELECT PREDMET.NASLOV FROM STUDENT, UPISAO, PREDMET WHERE STUDENT.JMBAG=UPISAO.JMBAG AND
UPISAO.SIFRA=PREDMET.SIFRA AND STUDENT.IMES='Janko' AND STUDENT.PREZIMES='Jankovic';
Zad 2 Ispisati listu imena studenata zajedno s nazivima kolegija koje su oni upisali, s time da iskljucimo studente na 3. godini. Ispisati
nazive onih kolegija koje je upisao bar jedan student na 2. godini.
a) SELECT IMES, NASLOV FROM STUDENT, UPISAO, PREDMET WHERE GODINA !=3 AND STUDENT.JMBAG=UPISAO.JMBAG AND
UPISAO.SIFRA=PREDMET.SIFRA;
b) SELECT DISTINCT NASLOV FROM STUDENT, UPISAO, PREDMET WHERE GODINA=2 AND STUDENT.JMBAG=UPISAO.JMBAG AND
UPISAO.SIFRA=PREDMET.SIFRA;
U SQLu moemo kombinirati tablicu samu sa sobom. Tada tablici dajemo nadimke (aliase).
Zad 3 Ispisati sve parove nastavnika (po prezimenima) koji sjede u istoj sobi.
SELECT N1.PREZIMEN,N2.PREZIMEN FROM NASTAVNIK N1, NASTAVNIK N2 WHERE N1.BRSOBE=N2.BRSOBE AND
N1.PREZIMEN<N2.PREZIMEN;
// dodali smo AND... da ne bi parove ispisivao 2 puta
Zad 4 Ispisati prezimena i place svih nastavnika koji imaju vecu placu od nastavnika Codd-a.
// etat emo se po N2, fixirat emo N1
SELECT N2.PREZIMEN, N2.PLACA FROM NASTAVNIK N1,NASTAVNIK N2 WHERE N1.PREZIMEN='Codd' AND N2.PLACA>N1.PLACA;
ili
SELECT PREZIMEN, PLACA FROM NASTAVNIK WHERE PLACA>(SELECT PLACA FROM NASTAVNIK WHERE PREZIMEN='Codd');
Zad 5 Ispisati listu imena i prezimena studenata zajedno s naslovima kolegija koje ti studenti nisu upisali.
// nisu upisali - trait u koje jesu upisali pa u to negirati tj nai studenti nisu u tom skupu
SELECT IMES, PREZIMES, NASLOV FROM STUDENT, PREDMET WHERE SIFRA NOT IN (SELECT SIFRA FROM UPISAO WHERE
UPISAO.JMBAG=STUDENT.JMBAG);
Zad 6 Ispisati imena i prezimena studenata koji nisu upisali ni jedan kolegij.
SELECT IMES, PREZIMES FROM STUDENT WHERE JMBAG NOT IN (SELECT JMBAG FROM UPISAO);
Zad 7 Ispisati imena studenata koji su upisali bar jedan kolegij. Ispisati sobe nastavnika koji predaju bar jedan kolegij.
a) SELECT DISTINCT IMES FROM STUDENT, UPISAO WHERE STUDENT.JMBAG=UPISAO.JMBAG
b) SELECT DISTINCT BRSOBE FROM NASTAVNIK WHERE OIB IN (SELECT OIB FROM PREDMET);
Funkcije u MySQL-u: funkcije 1, funkcije2 U SQLu umjesto atributa moemo koristiti i pozive funkcija.
Zad 9 Ispisi place svih nastavnika u stranoj valuti, kao cijeli broj. Jedinica strane valute vrijedi kao 7.8 jedinica domace. // ispisat emo i
prezime
SELECT PREZIMEN, ROUND(PLACA/7.8) FROM NASTAVNIK;
Zad 13 Ispisati: zbroj svih placa nastavnika, prosjecnu placu nastavnika, ime i placu nastavnika s najvecom placom.
a) SELECT SUM(PLACA) FROM NASTAVNIK;
b) SELECT AVG(PLACA) FROM NASTAVNIK;
c) SELECT IMEN, MAX(PLACA) FROM NASTAVNIK; NIJE DOBRO
upit mora biti ili "obian" ili grupirajui //pomou ugnjeenih upita//
SELECT IMEN, PLACA FROM NASTAVNIK WHERE PLACA=(SELECT MAX(PLACA) FROM NASTAVNIK);
Zad 14 Ispisati: broj studenata na 1. godini, broj studenata na 2. godini, broj svih godina, broj svih studenata.
a) SELECT COUNT(GODINA) FROM STUDENT WHERE GODINA=1;
b) SELECT COUNT(GODINA) FROM STUDENT WHERE GODINA=2;
c) SELECT COUNT(DISTINCT GODINA) FROM STUDENT;
d) SELECT COUNT(*) FROM STUDENT;
Zad 16 Ispisati maksimum, minimum i raspon place za nastavnike iz svake od soba. Zatim ispisati iste podatke samo za sobu 127.
a) SELECT MAX(PLACA), MIN(PLACA), MAX(PLACA)-MIN(PLACA) RASPON, BRSOBE FROM NASTAVNIK GROUP BY BRSOBE;
b) SELECT MAX(PLACA), MIN(PLACA), MAX(PLACA)-MIN(PLACA) RASPON, BRSOBE FROM NASTAVNIK WHERE BRSOBE=127 GROUP
BY BRSOBE;
Zad 18 Ispisite maksimalnu ocjenu koju su studenti s pojedine godine ostvarili iz pojedinog kolegija.
SELECT UPISAO.SIFRA, STUDENT.GODINA, MAX(OCJENA) FROM UPISAO, STUDENT WHERE STUDENT.JMBAG=UPISAO.JMBAG
GROUP BY UPISAO.SIFRA, STUDENT.GODINA;
Zad 19 Ispisite prosjecnu placu za nastavnike iz iste sobe, no samo za sobe u kojima ima vise od jednog nastavnika.
SELECT BRSOBE, COUNT(*), AVG(PLACA) FROM NASTAVNIK GROUP BY BRSOBE HAVING COUNT(*)>1;
naredba HAVING je analogon naredbi WHERE, jedino to se WHERE izvrava prije a HAVING nakon grupiranja
KOLOKVIJ
TO E BITI: SQL - jednostavni upiti, sloeni upiti, grupirajui upiti. Samo to. Kolokvij je na kompu, traje 45min, 8 selecta emo morati napraviti
HINTOVI:
ne biti brzoplet!
smijemo koristiti SELECT *, tako provjerim dal sam dobro rijeila zadatak !!!!!!!!!!!!!!!!