SQL (Structured Query Language)
BAZE PODATAKA
 Baza podataka je organizovana zbirka podataka.
 Razlikujemo bazu podataka od programa za upravljanje bazom podataka!
 Program za upravljanje bazom podataka (Database Management System, DBMS) podrazumeva da
su podaci na neki organizovani i sacuvani u obliku dostupnom programu
RELACIONE BAZE PODATAKA
 Podaci su organizovani u tabele.
 Svaka tabele predstavlja (najčešće) neki objekt (proizvod, firmu, radnika, ucenika) ili događaj
(transakciju, račun).
 Objekt/događaj koji je predstavljen u tablici zovemo entitet.
 Entitet ima svoja svojstva (atribute).
 Svako svojstvo treba biti nekog tipa podataka.
 Objekt opisuje neku pojavu, stvar, osobu.
 Događaj načelno opisuje vezu između dva ili više entiteta (uglavnom objekata).
OSOBINE TABELA





U jednom redu tabele držimo sve podatke o konkretnoj realizaciji jedne instance entiteta.
Kolona u tabele sadrži podatke o nekom svojstvu za sve entitete.
Red tabele zovemo zapis (record).
Kolona tabele zovemo polje (field)
Među poljima treba postojati jedno polje koje na jedinstven način određuje zapis. To polje
zovemo primarni ključ
PITANJA:
1. Što je baza podataka?
2. Čemu služe baze podataka?
3. Što je to zapis, a što polje?
4. Kako se podaci čuvaju u relacijskoj bazi podataka?
5. Kako se kreira nova baza podataka u programu Access?
6. Kako se kreira nova tabela podataka u bazi podataka?
7. Šta predstavljaju forme u Access-u?
8. Koji je najlakši način za kreiranje forme u Access-u?
9. Čemu služe izveštaji u Access-u?
10. Koje su dve osnovne razlike između formi i izveštaja?
11. Programi za obradu baza podataka
12. Primarni ključ
13. Spoljašnji ključ
14. Upiti-šta nam omogućavaju?
15. Povezivanje tabela
16. SQL
17. Značaj baza podataka!
1
SQL (Structured Query Language)
SQL (Structured Query Language) je jezik koji je Američki Institut za Nacionalne Standarde
(ANSI - American National Standards Institute) prihvatio kao standardni jezik za relacione
baze podataka. Takođe, prihvatila ga je i Internacionalna organizacija za standarde (ISO International Standards Organization). Većina relacionih baza podataka (poput Oracle baze)
jedino preko SQL-a dozvoljava pristup podacima. Ovo je i jedan od razloga potrebe da većina
korisnika baza podataka upozna komande
SQL-a. SQL omogućava korisnicima pristup podacima u sistemima za upravljanje relacionim
bazama
podataka (npr. Oracle, Sybase, Informix, Microsoft SQL Server).
Iskazi SQL jezika mogu se podeliti na četri grupe. To su iskazi za:
1. Pretraživanje - iskazi samo omogućuju prikazivanje postojećih podataka u bazi. Iskazi
uvek
počinju ključnom rečju SELECT iza koje slede željeni podaci, iskazi i sl. Iskazi pretraživanja
ne menjaju podatke u bazi. 2. Manipulaciju - jezik za manipulaciju podacima (DML - Data
Manipulation Language). DML
iskazi koriste se za menjanje podataka u bazi.
3. Definisanje - jezik za definisanje podataka (DDL - Data Definition Language). DDL iskazi
koriste se za kreiranje ili brisanje objekata baze podataka.
4. Kontrolu - jezik za kontrolu podataka (DCL - Data Control Language). DCL iskazi koriste se
za dodelu ili oduzimanje privilegija za pristup bazi podataka.
Za razliku od ključnih reči SQL-a, koje se mogu se pisati i malim i velikim slovima, podaci se
moraju napisati onako kako su dati u bazi podataka.
SELECT, FROM i WHERE su tri najčešće korišćene ključne reči u SQL-u.
WHERE omogućuje selektivnost u našem upitu. Bez upotrebe WHERE klauzule biće prikazani
svi podaci iz tabele.
1. SQL upit koji prikazuje kompletan sadržaj tabele RADNIK
SELECT * FROM RADNIK;
2. SQL upit koji prikazuje samo imena i prezimena radnika.
SELECT Ime, Prezime FROM RADNIK;
3. SQL upit koji za svakog radnika određuje matični broj njegovog neposrednog rukovodioca.
SELECT Rukovodilac FROM RADNIK;
SELECT DISTINCT Rukovodilac FROM RADNIK;
4. SQL upit koji prikazuje podatke o radnicima koji se prezivaju Petrović.
SELECT *
FROM RADNIK
WHERE Prezime = "Petrović";
5. SQL upit koji prikazuje samo imena i prezimena radnika čija je plata jednaka ili veća od
40000
SELECT Ime, Prezime
2
SQL (Structured Query Language)
FROM RADNIK
WHERE PLATA >= 40000;
6. SQL upit koji prikazuje samo imena i prezimena radnika koji se prezivaju Petrović i čija je
plata jednaka ili veća od 40000
SELECT *
FROM RADNIK
WHERE Prezime = "Petrović" AND Plata >= 40000;
7. SQL upit koji prikazuje podatke o radnicima koji se prezivaju Petrović ili se prezivaju
Jovanović
SELECT *
FROM RADNIK
WHERE Prezime = "Petrović" OR Prezime = "Jovanović";
ili
SELECT *
FROM RADNIK
WHERE Prezime IN ("Petrović","Jovanović");
8. SQL upit koji prikazuje podatke radnicima čija je plata u opsegu od 30000 do 40000
(uključujući i granice opsega)
SELECT *
FROM RADNIK
WHERE Plata BETWEEN 30000 AND 40000;
9. SQL upit za nalaženje svih radnika koji imaju "J" na početku prezimena, može se koristiti
šablon "J%".
SELECT *
FROM RADNIK
WHERE Prezime LIKE " J*";
10. SQL upit koji prikazuje podatke o svim radnicima kojima nije definisan datum rođenja
odnosno datum rođenja ima NULL vrednost
SELECT *
3
SQL (Structured Query Language)
FROM RADNIK
WHERE DatRodj IS NULL;
11. SQL upit u nastavku sortira podatke o radnicima prema broju sektora u opadajućem
redosledu a prema prezimenu u rastućem redosledu.
SELECT *
FROM RADNIK
ORDER BY Sektor DESC, Prezime ASC;
12. SQL upit koji prikazuje imena i prezimena radnika kao i njihove plate uvećane za bonus od
5000
SELECT Ime, Prezime, Plata + 5000 AS PlataSaBonusom
FROM RADNIK;
13. Sledeći SQL upit određuje maksimalnu, minimalnu, prosečnu i ukupnu platu svih radnika.
SELECT MAX(Plata) AS MaxPlata, MIN(Plata) AS MinPlata,
AVG(Plata) AS ProsPlata, SUM(Plata) AS UkPlata
FROM RADNIK;
1. Napisati SQL upit koji prikazuje kompletan sadržaj tabele SEKTOR.
SELECT * FROM SEKTOR;
2. Napisati SQL upit koji prikazuje nazive svih projekata koji postoje u preduzeću, lokacije na
kojima se nalaze i brojeve sektora koji su zaduženi za njih.
SELECT Naziv, Lokacija,Sektor FROM PROJEKAT;
3. Napisati SQL upit koji određuje spisak različitih srodstava koje imaju članovi porodice.
SELECT DISTINCT Srodstvo
FROM CLAN_PORODICE;
4. Modifikovati upit iz tačke 2 tako da se podaci sortiraju u opadajućem redosledu po
lokacijama na kojima se nalaze.
SELECT Naziv, Lokacija,Sektor FROM PROJEKAT ORDER BY Lokacija DESC;
5. Napisati SQl upit koji prikazuje imena svih projekata koji su locirani u Nišu.
SELECT Naziv FROM PROJEKAT WHERE Lokacija = "Niš";
6. Napisati SQL upit koji prikazuje imena svih projekata čije ime počinje slovom P.
4
SQL (Structured Query Language)
SELECT Naziv
FROM PROJEKAT
WHERE Naziv LIKE "P*";
7. Napisati SQL upit koji prikazuje imena svih projekata koji su locirani u Pirotu i čije ime
počinje slovom P.
SELECT Naziv
FROM PROJEKAT
WHERE Naziv LIKE "P*" AND Lokacija= "Pirot";
8. Napisati SQL upit koji za projekte locirane u Nišu ili Leskovcu prikazuje njihova imena i
brojeve sektora koji su zaduženi za njih.
SELECT Naziv, Sektor FROM PROJEKAT
WHERE Lokacija IN("Niš","Leskovac");
9. Napisati SQL upit koji prikazuje imena i pol svih članova porodice koji imaju srodstvo
"sin".
SELECT Ime, Pol FROM CLAN_PORODICE WHERE Srodstvo=”sin”;
10. Napisati SQL upit koji određuje imena i prezimena svih radnika čija bi plata nakon
povećanja za 10% bila veća od 40000.
SELECT Ime, Prezime,
FROM RADNIK
WHERE Plata + Plata /10>40000;
11. Napisati SQL upit koji određuje prosečnu zaradu za radnike koji rade u sektoru broj 4.
SELECT AVG(Plata)
FROM RADNIK
WHERE Sektor=5;
12. Izračunati srednju vrijednost plate zaposlenih u sektoru Razvoja
SELECT AVG(Plata)
FROM Radnik, Sektor
WHERE Radnik.Sektor=Sektor.Broj
AND Sektor.Naziv = 'Razvoj';
5
SQL (Structured Query Language)
13. Prikazati ime i platu radnika sa najvećim ličnim dohotkom.
SELECT ime, plata
FROM radnik
WHERE plata =(SELECT MAX(plata) FROM radnik);
14. Naći srednju vrednost plate u svakom sektoru.
SELECT Sektor.Naziv, Avg(Radnik.Plata) AS ProsekPlata
FROM Sektor, Radnik
WHERE Sektor.Broj=Radnik.Sektor
GROUP BY Sektor.Naziv;
15. Lista podatke samo o sektorima koji imaju više od jednog radnika.
SELECT Sektor, COUNT(*)
FROM RADNIK
GROUP BY Sektor
HAVING COUNT(*) > 1;
16. SQL upit koji vraća nazive sektora u kojima rade radnici koji se prezivaju Petrović i Jovanović.
SELECT Naziv
FROM SEKTOR, RADNIK
WHERE Broj = Sektor AND Prezime = 'Jovanović'
UNION
SELECT Naziv
FROM SEKTOR, RADNIK
WHERE Broj = Sektor AND Prezime = 'Petrović';
17. SQL upit koji korišćenjem klauzule INTERSECT određuje podatke o radnicima koji rade u
sektoru Administracija I koji imaju platu veću od 40000. MS Access ne podržava klauzulu
INTERSECT.
SELECT MatBr, Ime, Prezime
FROM SEKTOR, RADNIK
WHERE Broj = Sektor AND Naziv = 'Administracija'
INTERSECT
SELECT MatBr, Ime, Prezime
FROM SEKTOR, RADNIK
6
SQL (Structured Query Language)
WHERE Broj = Sektor AND plata > 40000;
1. Napisati SQL upit koji prikazuje listu radnika samo u slučaju da postoji projekat „ProizvodZ“ u
listi projekata tog preduzeća:
SELECT IME, PREZIME
FROM RADNIK
WHERE EXISTS
(SELECT *
FROM PROJEKAT
WHERE Naziv = 'ProizvodZ');
2. Napisati SQL upit koji prikazuje listu radnika samo u slučaju da ne postoji projekat čija je
lokacija „Zajecar“ u listi projekata tog preduzeća:
SELECT IME, PREZIME
FROM RADNIK
WHERE NOT EXISTS
(SELECT *
FROM PROJEKAT
WHERE Lokacija = 'Zajecar');
3. Dobiti imena radnika ciji je rukovodilac kao i Jovanovicev:
SELECT *
FROM Radnik
WHERE Rukovodilac=
(SELECT Rukovodilac FROM Radnik WHERE Prezime='Jovanović');
4. Prikazati podatke o radnicima iz odeljenja 4 sa istim radnim mestom kao bilo
ko iz odeljenja 5.
SELECT *
FROM Radnik
WHERE Sektor = 4
AND Plata IN
(SELECT Plata FROM Radnik WHERE Sektor = 5)
5. Prikazati kompletne zapise radnika relacije Radnik, cija šifra rukovodioca nije 888665555 i
987654321.
SELECT *
FROM Radnik
WHERE Rukovodilac NOT IN (888665555, 987654321)
6. Koji radnici zaradjuju više od bilo kog radnika odeljenja 5.
SELECT IME, PLATA, Sektor
FROM radnik
WHERE PLATA > ANY
(SELECT PLATA
FROM radnik
WHERE Sektor = 5);
7
SQL (Structured Query Language)
1. Napisati SQL upit koji za svaki broj sektora određuje broj projekata koji su zaduženi za taj
sektor.
SELECT Sektor.Broj,Count(*) AS BrPr
FROM Sektor, Projekat
WHERE Sektor.Broj=Projekat.Sektor
GROUP BY Sektor.Broj;
2. Napisati SQL upit koji za svaki broj sektora računa prosečnu i maksimalnu platu radnika
koji rade u tom sektoru.
SELECT Sektor.Naziv, Avg(Radnik.Plata) AS ProsekPlata , Max(Radnik.Plata) AS MaxPlata
FROM Sektor, Radnik
WHERE Sektor.Broj=Radnik.Sektor
GROUP BY Sektor.Naziv;
3. Napisati SQL upit koji određuje brojeve sektora koji su zaduženi za dva i više projekta.
SELECT Sektor, COUNT(*)
FROM Projekat
GROUP BY Sektor
HAVING COUNT(*) >= 2;
4. Napisati SQL upit koji za svakog radnika prikazuje ime, prezime, pol i naziv sektora u kome
rade.
SELECT Radnik.Ime, Radnik.Prezime, Radnik.pol, Sektor.Naziv
FROM Sektor, Radnik
WHERE Sektor.Broj=Radnik.Sektor ;
5.
Napisati SQL upit koji za svaki projekat prikazuje njegov broj i broj angažovanih radnika.
SELECT RADI_NA.Projekat, COUNT(*) AS BrRadnika
FROM RADI_NA,RADNIK
WHERE RADI_NA.Radnik=RADNIK.MatBr
GROUP BY RADI_NA.Projekat;
6.
Napisati SQL upit koji prikazuje samo podatke o projektima koji imaju više od jednog
angažovanog radnika.(izmeniti upit iz prethodnog zadatka)
8
SQL (Structured Query Language)
SELECT RADI_NA.Projekat, COUNT(*) AS BrRadnika
FROM RADI_NA,RADNIK
WHERE RADI_NA.Radnik=RADNIK.MatBr
GROUP BY RADI_NA.Projekat
HAVING COUNT(*) >= 2;
7. Napisati SQL upit koji prikazuje imena i prezimena radnika koji imaju više od jednog člana
porodice.
SELECT Ime, Prezime
FROM RADNIK
WHERE RADNIK.MatBr IN
(SELECT RADNIK.MatBr
FROM CLAN_PORODICE, RADNIK
WHERE CLAN_PORODICE.Radnik=RADNIK.MatBr
GROUP BY RADNIK.MatBr
HAVING COUNT(*) >= 2);
8. Napisati SQL upit koji određuje imena i prezimena radnika koji rade u sektoru broj 4 i
nemaju nijednog člana porodice.
9. Napisati SQL upit koji za svaki projekat određuje ime i prezime rukovodioca sektora koji je
zadužen za taj projekat.
10. Napisati SQL upit koji određuje imena i prezimena radnika koji rade u sektoru broj a
angažovani su na projektima koji su u nadležnosti sektora broj 5.
11. Napisati SQL upit koji određuje imena i prezimena radnika koji se ne nalaze na poziciji šef
sektora.
9
Download

SQL (Structured Query Language) BAZE PODATAKA  Baza