Professional Documents
Culture Documents
SQL Skripta 1-Deo Sa Resenjima
SQL Skripta 1-Deo Sa Resenjima
JAVA Obuka
SQL
Structured Query Language
Predavači:
Aničić dr Nenad, redovni profesor, FON
Igor Mijajlović, softver inženjer, BREZA
Dragana Nikić, softver inženjer, BREZA
Biljana Nedić, softver inženjer, BREZA
Sadržaj:
Baze podataka ............................................................................................................................................... 4
Koncept relacione baze podataka ................................................................................................................. 4
Terminologija ................................................................................................................................................ 5
Primarni i spoljni ključ ............................................................................................................................... 6
Šema baze podataka ................................................................................................................................. 6
Okruženje za razvoj ................................................................................................................................... 7
SQL (Structured Query Language)................................................................................................................. 8
SELECT naredba............................................................................................................................................. 9
Pravila SQL jezika .......................................................................................................................................... 9
SELECT naredba........................................................................................................................................... 10
Selektovanje određenih kolona .............................................................................................................. 10
Filtriranje dupliranih redova ....................................................................................................................... 10
Aritmetički operatori............................................................................................................................... 11
Definisanje NULL vrednosti ..................................................................................................................... 11
ALIJASI kolone ......................................................................................................................................... 11
Konkatenacija.......................................................................................................................................... 12
Literali ..................................................................................................................................................... 12
Komentari ............................................................................................................................................... 13
WHERE klauzula .......................................................................................................................................... 13
Stringovi i datumi .................................................................................................................................... 13
Operatori poređenja ............................................................................................................................... 14
BETWEEN operator ................................................................................................................................. 14
IN operator.............................................................................................................................................. 15
LIKE operator........................................................................................................................................... 15
ESCAPE operator ..................................................................................................................................... 16
Džoker znaci ............................................................................................................................................ 16
IS NULL operator ..................................................................................................................................... 16
Složeni uslovi ........................................................................................................................................... 16
Prioriet operatora ................................................................................................................................... 17
ORDER BY klauzula .................................................................................................................................. 17
Sortiranje – pozicija kolone ................................................................................................................. 17
Višestruko sortiranje ........................................................................................................................... 18
Sortiranje NULL vrednosti ................................................................................................................... 18
Funkcije za obradu pojedinačnih redova .................................................................................................... 18
Numeričke funkcije ................................................................................................................................. 18
Tekstualne funkcije ................................................................................................................................. 19
Datumske funkcije .................................................................................................................................. 21
SYSDATE .............................................................................................................................................. 21
CURRENT_DATE , CURRENT_TIMESTAMP .......................................................................................... 21
Aritmetičke operacije sa datumima ........................................................................................................ 21
Intervalne funkcije za obradu datuma .................................................................................................... 22
Agregatne funkcije ...................................................................................................................................... 22
AVG i SUM funkcije ................................................................................................................................. 23
MIN i MAX funkcije ................................................................................................................................. 23
COUNT funkcija ....................................................................................................................................... 23
DISTINCT ključna reč ............................................................................................................................... 24
Agregatne funkcije i null vrednosti ......................................................................................................... 24
GROUP BY klauzula ................................................................................................................................. 24
Grupisanje po više kolona: ...................................................................................................................... 25
Restrikcija grupnih rezultata pomoću HAVING klauzule......................................................................... 26
ZADACI: ....................................................................................................................................................... 27
REŠENJA: ..................................................................................................................................................... 29
Baze podataka
Svaka organizacija ima određene potrebe za informacijama. Biblioteka čuva podatke o
članovima, knjigama, datumima... Firme imaju potrebu da čuvaju informacije o zaposlenima,
odeljenjima, platama... Ove podatke firme mogu čuvati na različite načine.
U papirnoj formi
Elektronske tabele
Baza podataka – organizovana kolekcija informacija (hijerarhijska, mrežna,
relaciona i objektno relaciona) . Program koji čuva, preuzima i modifikuje
podatke u bazi podataka zove se DBMS (Database Management system).
Tabela Prijava:
Prva tabela na sledećoj slici ne zadovoljava 4. uslov.
Ukoliko želite da naučite kako se podaci iz realnog sistema modeluju u relacije (tabele)
konsultovati: Базе података, Лазаревић Б, Марјановић З, Аничић Н, Бабарогић С, ФОН.
Terminologija
Relaciona baza podataka sadrži jednu ili više tabela. Tabela je bazična struktura RDBMS-a.
Tabela skladišti sve potrebne podatke o realnom svetu, kao što su zaposleni, kupci itd…
Na slici je prikazana tabela tj. relacija EMPLOYEES.
1.Red prikazuje sve podatke potrebne za konkretnog radnika. Svaki red u tabeli treba biti
identifikovan preko primarnog ključa, koji ne dozvoljava duplikate. Redosled redova nije
značajan. Redosled se može odrediti prilikom prikazivanja podataka.
2.Kolona EMPLOYEE_ID prikazuje id zaposlenog. Ovaj broj je jedinstven i preko njega se
identifikuje radnik u tabeli. U ovoj tabeli ova kolona je primarni ključ. Primarni ključ mora
sadržati vrednost i ona mora biti jedinstvena.
3. Kolona SALARY nije ključna vrednost. Redosled kolona nije značajan. Redosled se može
odrediti prilikom prikazivanja podataka.
4. Kolona DEPARTMENT_ID predstavlja spoljni ključ. Preko spoljnog ključa ova tabela je
povezana sa drugom (DEPARTMENTS tabela). Spoljni ključ ukazuje na primarni ključ neke druge
tabele.
5. Polje se nalazi u preseku reda i kolone. U njemu može biti samo jedna vrednost.
6. Ukoliko polje nije popunjeno u njemu je ispisano null. U tabeli EMPLOYEES samo zaposleni
koji rade u prodaji imaju koeficijent u polju COMMISSION_PCT (provizija). Ostali zaposleni imaju
vrednost null.
Opis tabela
REGIONS prikazuje regije npr. America, Asia..
COUNTRIES prikazuje zemlje koje su povezane sa regionima.
LOCATIONS sadrži adresu, poštanski kod, grad i povezan je sa tabelom COUNTRIES.
DEPARTMENTS prikazuje detalje o odeljenju u kom zaposleni radi. Svako odeljenje može imati
vezu koja prikazuje menadžera odeljenja u EMPLOYEES tabeli.
EMPLOYEES sadrži podatke o svakom zaposlenom koji radi u odeljenju. Neki zaposleni ne
moraju biti pridruženi ni jednom odeljenju.
JOBS sarži nazive radnih mesta.
JOB_HISTORY sadrži istoriju zapošljavanja zaposlenog. Ukoliko zašoslenih promeni odeljenje ili
promeni ulogu u okviru posla ubacuje se nov red u ovu tabelu.
Okruženje za razvoj
SQL (Structured Query Language)
SQL (Stuctured Query Language) je standardni relacioni upitni jezik (ANSI standard). Njegov
tvorac je Chamberlin, a nastao je u IBM-ovoj istraživačkoj laboratoriji (IBM Research
Laboratory) u San Jose-u, Kalifornija 1974. godine, dakle na istom mestu gde je E.F. Codd 1970
definisao osnovne koncepte relacionog modela podataka.
SQL je izgubio dosta od svoje osnovne karakteristike-strukturnosti, jer je standard definisan
kada su različiti proizvodjači već imali u značajnoj meri razvijene sopstvene dijalekte SQL-a, tako
da je standardni SQL praktično rezultat kompromisa najuticajnijih proizvodjača. I pored toga
SQL je neophodno znati i to iz dva razloga:
1
Standardni upitni jezik – dr Zoran Marjanović
SELECT naredba
SELECT < lista atributa >
SELECT *
FROM departments;
SELECT naredba
SELECT < lista atributa >
SELECT *
FROM departments
Pored prikazivanja svih atributa neke relacije (tj. kolona neke tabele) koristeći SELECT klauzulu moguće
je:
FROM departments;
FROM employees;
Aritmetički operatori
FROM employees;
FROM employees;
ALIJASI kolone
Menjaju naziv kolone
Korisne su jer povećavaju čitljivost
Piše se odmah iza naziva kolone Immediately follows the column name (može se napisati i
opciona AS ključna reč između naziva kolone i alijasa)
Potrebno je upisati znake navoda (“ “) ukoliko alijas sadrži space.
FROM employees;
FROM employees;
Konkatenacija
Operator konkatenacije:
FROM employees;
Literali
Literal je karakter koji se piše između apostrofa.
AS "Employee Details"
FROM employees;
Komentari
-- Ovo je SQL komentar
WHERE klauzula
WHERE klauzula sadrži uslov koji se treba ispuniti da bi se redovi tabele prikazali. WHERE klauzula se piše
nakon FROM.
FROM employees
Stringovi i datumi
Stringovi i datumi se prilikom poređenja stavljaju pod apostrofe
FROM employees
FROM employees
Operatori poređenja
FROM employees
BETWEEN operator
BETWEEN operator se koristi za obuhvatanje raspona vrednosti (inkluzivno)
FROM employees
FROM employees
LIKE operator
LIKE operator koristimo da pronađemo vrednosti koje „liče“ na željeni string za pretragu
SELECT first_name
FROM employees
Klauzula ESCAPE omogućava nalaženje takvih kolona tako što privremeno, unutar upita, poništava
specijalni efekat karaktera '%' ili '_'.
Escape karakter sami biramo navodjenjem u ESCAPE klauzuli i on poništava specijalni efekat karaktera
ispred koga se neposredno nalazi u uzorku za pretraživanje.
Prikazati sve podatke o radnicima kojima naziv počinje sa IT a posle toga imaju '_'.
Džoker znaci
Možete kombinovati džoker znake (%, _) prilikom kreiranja uzorka za pretragu:
SELECT last_name
FROM employees
IS NULL operator
Provera da li je vrednost null.
FROM employees
Složeni uslovi
Prioriet operatora
ORDER BY klauzula
ORDER BY klauzula sortira vraćene redove:
FROM employees
ORDER BY hire_date ;
Korišćenjem ORDER BY klauzule moguće je sortirati rezultujuću tabelu po jednom ili više atributa u
rastućem ili opadajućem redosledu.
FROM employees
ORDER BY 3;
Višestruko sortiranje
SELECT last_name, department_id, salary
FROM employees
Numeričke funkcije
prihvataju broj ili neki drugi tip za ulaz ali za izlaz uvek vraćaju broj.
ROUND
TRUNC
MOD
CEIL
FLOOR
POWER
SQRT
ROUND(45.923,-1) zaokružava na najbližu deseticu
FROM employees
WHERE MOD(employee_id,2) = 0;
Tekstualne funkcije
Primer 1:
Datumske funkcije
SYSDATE
vraća trenutni datum u default formatu DD-MM-RR. Datum ima dve komponente: datum i vreme.
CURRENT_DATE , CURRENT_TIMESTAMP
CURRENT_DATE vraća trenutni datum koji dobija iz korisničke sesije.
FROM employees
Agregatne funkcije
Agregatne funkcije obrađuju grupu podataka a vaćaju jedan rezultat.
FROM employees
FROM employees;
COUNT funkcija
COUNT(*) vraća broj redova u tabeli:
SELECT COUNT(*)
FROM employees
SELECT COUNT(commission_pct)
FROM employees
FROM employees;
SELECT AVG(commission_pct)
FROM employees;
FROM employees;
GROUP BY klauzula
Group by klauzula od jedne tabele kreira više grupa.
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
Primer 1:
Sve kolone u SELECT-u koje nisu deo grupne funkcije moraju biti u GROUP BY klauzuli.
SELECT department_id, AVG(salary)
FROM employees
GROUP BY department_id ;
Primer 2:
SELECT AVG(salary)
FROM employees
GROUP BY department_id ;
FROM employees
ORDER BY department_id;
1. Redovi se grupišu.
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];
Primer:
FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000
ZADACI:
1. Prikazati celu tabelu odeljenja
2. Prikazati celu tabelu zaposleni
3. Prikazati ime, prezime i datum zaposlenja radnika.
4. Prikazati grad, poštanski kod iz tabele lokacija.
5. Prikazati različita odeljenja iz tabele odeljenja.
6. Prikazati ime, prezime, platu radnika i novu kolonu koju ćemo nazvati MART. U njoj treba
prikazati platu za mart koja će zbog dobrog poslovanja firme biti veća za 10%.
7. Zbog promene centrale svi telefonski brojevi dobijaju na početku cifru 2. Napraviti
SELECT upit koji će prikazati ove izmene. (Primetite da se u samoj tabeli neće ugraditi ova
izmena – to je samo zbog štampe). Kako vršiti izmenu radićemo u toku kursa.
8. Prikazati ime i prezime u jednoj koloni. Naziv kolone je Ime i prezime a ime i prezime
treba spojiti i razdvojiti razmakom:
9. Za izveštaj formirati sledeću formu: U okviru jedne kolone čiji će naziv biti izvestaj
prikazati sledeća polja:
Za svaki red tabele employees treba ispisati
Ime i prezime: konkretno ime i prezime zaposlenog, zatim tekst zaposlen je i prikaz iz
kolone hire_date.
REŠENJA:
1 SELECT *
FROM departments;
2 SELECT *
FROM employees;
3 SELECT first_name,last_name,hire_date
FROM employees;
4 SELECT city,postal_code
FROM locations;
5 SELECT DISTINCT department_name
FROM departments;
6 SELECT first_name,last_name, salary, salary+salary*0.1 AS MART
FROM employees
7 SELECT '2'|| phone_number AS "Nova centrala"
FROM employees;
8 SELECT first_name||' '||last_name AS "Ime i prezime"
FROM employees;
9 SELECT 'Ime i prezime: '||first_name||' '||last_name || ' zaposlen je '||hire_date AS izvestaj
FROM employees;
10 SELECT 7*15-2*(8%3) AS racun;
11 SELECT first_name ||' '||last_name AS Full_Name, salary
FROM employees
WHERE salary < 6000;
12 SELECT first_name, last_name, department_id
FROM employees
WHERE last_name = 'Khoo';
13 SELECT *
FROM departments
WHERE department_name = 'Marketing';
14 SELECT *
FROM employees
WHERE hire_date < '2002-06-21';
15 SELECT *
FROM employees
WHERE salary BETWEEN 8000 AND 12000
AND commission_pct IS NOT NULL
16 SELECT *
FROM employees
WHERE department_id NOT IN (40 , 120 , 70)
AND hire_date < '2005-JUN-05'
17 SELECT *
FROM jobs
ORDER BY job_title;
18 SELECT first_name || ' ' || last_name as Full_Name, hire_date,
salary, department_id
FROM employees
WHERE first_name NOT LIKE '%M%'
ORDER BY department_id;
19 SELECT first_name ||' '||last_name AS Full_Name,
job_id, hire_date
FROM employees
WHERE hire_date
BETWEEN '2007-11-05' AND '2009-07-05';
20 SELECT first_name ||' '||last_name AS Full_Name, salary
FROM employees
WHERE commission_pct IS NULL; -- WHERE commission_pc=0;
21 SELECT first_name ||' '|| last_name AS Full_Name, department_id
FROM employees
WHERE department_id IN (70 , 90);
22 SELECT first_name,last_name, department_id
FROM employees
WHERE first_name LIKE '__s%';
23 SELECT first_name, last_name, hire_date
FROM employees
WHERE job_id IN ('SA_REP', 'SA_MAN');
24 SELECT first_name ||' '||last_name AS Full_Name, hire_date ,
commission_pct, email,phone_number AS Contact_Details, salary
FROM employees
WHERE salary > 11000
ORDER BY first_name DESC;
25 SELECT first_name, last_name
FROM employees
WHERE first_name LIKE 'D%'
OR last_name LIKE 'D%';
26 SELECT ROUND(68.95657 ,3), ROUND(68.95657 ,-2)
FROM DUAL;
27 SELECT *
FROM departments
where mod(location_id,17)=0;
28 SELECT employee_id, last_name, department_id
FROM employees
WHERE LOWER(last_name) = 'hunold';
29 SELECT LPAD(first_name,16,'*') AS "Desno poravnanje“
-- SELECT RPAD(first_name,16,'*') AS "Levo poravnanje"
FROM employees;
30 SELECT substr(phone_number,-4,4)
FROM employees ;
31 SELECT AVG(salary), MAX(salary), MIN(salary)
FROM employees;
32 SELECT MAX(salary)-MIN(salary)AS "Razlika MAX i MIN"
FROM employees
33 SELECT COUNT(*)
FROM employees
WHERE department_id = 110;
34 SELECT COUNT(DISTINCT city)
FROM locations;
35 SELECT (COUNT (*)-COUNT(DISTINCT last_name))*2 "Za inspekciju"
FROM employees;
36 SELECT country_id, COUNT(*)
FROM locations
GROUP BY country_id;
37 SELECT manager_id, COUNT(*)
FROM employees
GROUP BY manager_id;
38 SELECT employee_id, MAX(end_date)
FROM job_history
GROUP BY employee_id;
39 SELECT job_id, COUNT(*), SUM(salary),
MAX(salary)-MIN(salary) AS "Razlika MAX-MIN"
FROM employees
GROUP BY job_id;
40 SELECT COUNT(*)
FROM employees
WHERE salary BETWEEN 8000 AND 12000
AND commission_pct IS NOT NULL;
41 SELECT employee_id
FROM job_history
GROUP BY employee_id
HAVING COUNT(*) >=2;
42 SELECT job_id, trunc(AVG(salary),2 ) AS "Prosek plate veći od 8000"
FROM employees
GROUP BY job_id
HAVING AVG(salary)>8000;
43 SELECT first_name, salary AS "ZARADA PO CASU"
FROM employees
WHERE salary / (22 * 8) > 50;
44 SELECT phone_number, replace(phone_number, substr(phone_number,-4,4),'****')
from employees;
45 SELECT job_id, replace(job_id,'_','')
from employees;