You are on page 1of 31

RFP470 Program prekvalifikacija u IT sektoru

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).

Koncept relacione baze podataka


Dr. Edgar Frank Codd (1970) je postavio osnove za relacioni model baze podataka.
Relacioni model ima 3 komponente:
 Struktura podataka - kolekcije relacija koje čuvaju podatke
 Manipulacija podacima - skup operatora koji mogu delovati na relacije
 Integritet podataka - očuvanja tačnosti i konzistentnosti podataka
Struktura podataka - kolekcije relacija koje čuvaju podatke.
Relacija je isto što i tabela ukoliko zadovoljava sledeća 4 uslova:
1. ne postoji duplikat vrste tabele,
2. redosled vrsta nije značajan,
3. redosled kolona nije značajan
4. sve vrednosti atributa u relacijama su atomske.
Primer:
Tabela Student:

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.

Primarni i spoljni ključ


Primarni ključ je polje pomoću koga se jedinstveno može identifikovati svaki red tabele.
Primarni ključ ne može biti null.
Spoljni ključ u jednoj tabeli je primarni ključ druge. Pomoću spoljnog ključa moguće je vršiti
povezivanje tabela. Spoljni ključ može imati vrednost null.

Šema baze podataka


Šema baze podataka opisuje tabele koji su prikazani u bazi podataka i odnose među njima.
Šema koja će se koristiti na kursu: Human Resources (HR) šema

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:

 u literaturi o relacionim bazama podataka često se ne objašnjava SQL, nego se koristi


kao standard, kao nešto što je poznato da bi se objasnili drugi koncepti relacionih baza
podataka,
 SQL je implementiran u više od 100 komercijalno raspoloživih sistema za upravljanje
bazama podataka (SUBP-ova) relacionog tipa (DB2, SQL/DS, ORACLE, ...). Znajući SQL
moguće je na gotovo identičan način raditi sa bilo kojim od njih. Proizvodjači relacionih
SUBP-ova sa drugim upitnim jezicima prinudjeni su da omoguče alternativno korišćenje i
SQL-a, kako bi opstali na tržištu.
SQL je jezik koji je okrenut korisniku. Uči se lako i brzo, a predhodno iskustvo u automatskoj
obradi nije neophodno. Njegove osnovne karakteristike su:
1. Jednostavnost i jednobraznost pri korišćenju
Tabela (relacija) se kreira jednom izvršnom naredbom. Odmah po kreiranju tabela je
raspoloživa za korišćenje. Svi podaci memorisani su u tabelama i rezultat bilo koje operacije se
logički prikazuje u obliku tabele.
2. Mogućnost interaktivnog i klasičnog (aplikativnog) programiranja
Koriste}i SQL dobijaju se odgovori na trenutne, unapred ne predvi|ene zahteve ili se SQL
blokovi "ugrađuju" u klasični viši programski jezik (FORTRAN, COBOL, PL/I, C) omogućujući
klasičnu obradu.
3. Neproceduralnost (tj. proceduralnost u minimalnom stepenu)
Ni za jedan jezik se ne može reći da je potpuno neproceduralan, već da je
neproceduralan u većem ili manjem stepenu. SQL je u velikoj meri neproceduralan jer definiše
ŠTA, a ne KAKO: koji podaci se žele, koje tabele se referenciraju i koji uslovi treba da budu
ispunjeni, bez specifikacije procedure za dobijanje željenih podataka. Preciznije rečeno SQL je
na višem nivou apstrakcije nego klasični viši programski jezici, odnosno mnogi podjezici
relacionih sistema za upravljanje bazama podataka1.

1
Standardni upitni jezik – dr Zoran Marjanović
SELECT naredba
SELECT < lista atributa >

FROM < lista relacija >

WHERE < kvalifikacioni izraz >

SELECT *

FROM departments;

Pravila SQL jezika


 SQL iskazi NISU case-sensitive.
 SQL iskazi se mogu ukucavati u jednom ili više redova.
 Ključne reči se ne mogu skraćivati ili razdvajati u više linija.
 Klauzule se obično postavljaju u posebnim linijama.
 U SQL Developer-u, SQL izrazi se mogu odvajati tačkom zarez (;). Tačka zarez je obavezna ukoliko
se izvršava više SQL izraza.
 SQL Developer:
 Default poravnanje: u levo
 Default prikaz naslova kolona: velika slova

SELECT naredba
SELECT < lista atributa >

FROM < lista relacija >

WHERE < kvalifikacioni izraz >

SELECT *

FROM departments

Pored prikazivanja svih atributa neke relacije (tj. kolona neke tabele) koristeći SELECT klauzulu moguće
je:

 izdvojiti specifične atribute relacije (kolone) i kontrolisati redosled pojavljivanja atributa

 sprečiti selekciju duplih redova

Selektovanje određenih kolona


SELECT department_id, location_id

FROM departments;

Filtriranje dupliranih redova


Default prikaz je prikaz svih redova, uključujući i duplikate.

SELECT DISTINCT department_id

FROM employees;
Aritmetički operatori

SELECT last_name, salary, salary + 300

FROM employees;

Definisanje NULL vrednosti


 Null je vrednost koja nije dostupna, nedodeljena, nepoznata ili neupotrebljiva.
 Null nije isto što i nula ili prazan prostor.

SELECT last_name, job_id, salary, commission_pct

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.

SELECT last_name AS name, commission_pct comm

FROM employees;

SELECT last_name "Name" , salary*12 "Annual Salary"

FROM employees;

Konkatenacija
Operator konkatenacije:

 Spaja sadržaj više kolona u jednu


 Predstavlja se sa dve paralelne linije(||)

SELECT last_name||job_id AS "Employees"

FROM employees;

Literali
Literal je karakter koji se piše između apostrofa.

Literal se prikazuje za svaki red pojedinačno.

SELECT last_name ||' is a '||job_id

AS "Employee Details"

FROM employees;
Komentari
-- Ovo je SQL komentar

/* Prva linija komentara


druga linija komentara*/ .

WHERE klauzula
WHERE klauzula sadrži uslov koji se treba ispuniti da bi se redovi tabele prikazali. WHERE klauzula se piše
nakon FROM.

Vrši restrikciju prikazanih redova:

SELECT < lista atributa >

FROM < lista relacija >

WHERE < uslov >

SELECT employee_id, last_name, job_id, department_id

FROM employees

NAPOMENA: U WHERE klauzuli se ne mogu koristiti alijasi!

Stringovi i datumi
Stringovi i datumi se prilikom poređenja stavljaju pod apostrofe

Poređenje stringova je case-sensitive a datuma format-sensitive.

Dafault prikaz datuma je DD-MON-RR

SELECT last_name, job_id, department_id

FROM employees

WHERE last_name = 'Whalen' ;


SELECT last_name

FROM employees

WHERE hire_date = '17-OCT-03' ;

Operatori poređenja

SELECT last_name, salary

FROM employees

WHERE salary <= 3000 ;

BETWEEN operator
BETWEEN operator se koristi za obuhvatanje raspona vrednosti (inkluzivno)

SELECT last_name, salary

FROM employees

WHERE salary BETWEEN 2500 AND 3500 ;


IN operator
IN operator testira postojanje vrednosti u listi:

SELECT employee_id, last_name, salary, manager_id

FROM employees

WHERE manager_id IN (100, 101, 201) ;

LIKE operator
LIKE operator koristimo da pronađemo vrednosti koje „liče“ na željeni string za pretragu

String za pretragu može sadržati karaktere ili brojeve:

 % menja 0 ili više karaktera


 _ menja jedan karakter

SELECT first_name

FROM employees

WHERE first_name LIKE 'S%' ;

 ... gde se ime završava sa N.

 WHERE IME LIKE '%N'

 ... gde je treći karakter imena R.

 WHERE IME LIKE '__R%'

 ... gde je ime dugačko 5 karaktera.

 WHERE IME LIKE '_____'

 ... gde ime nije dugačko 5 karaktera.

 WHERE IME NOT LIKE '_____'

 ... gde je u imenu slovo G posle R.

 WHERE IME LIKE '%R%G%'


ESCAPE operator
Ponekad vrednosti tekstualnih kolona sadrže i karaktere '%' i '_'.

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 '_'.

SELECT * FROM employees

WHERE job_id LIKE 'IT?_%' ESCAPE '?';

Džoker znaci
Možete kombinovati džoker znake (%, _) prilikom kreiranja uzorka za pretragu:

SELECT last_name

FROM employees

WHERE last_name LIKE '_o%' ;

IS NULL operator
Provera da li je vrednost null.

SELECT last_name, manager_id

FROM employees

WHERE manager_id IS NULL ;

Složeni uslovi
Prioriet operatora

ORDER BY klauzula
ORDER BY klauzula sortira vraćene redove:

ASC: rastući poredak, default

DESC: opadajući poredak

SELECT last_name, job_id, department_id, hire_date

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.

Za specifikaciju rastućeg redosleda koristi se klauzula ASC, a za specifikaciju opadajućeg redosleda


klauzula DESC. Rastući redosled se podrazumeva, pa klauzulu ASC nije neophodno navoditi, za razliku od
klauzule DESC koju uvek treba navesti kada se sortira u opadajućem redosledu.

ORDER BY je uvek poslednja klauzula u SELECT bloku.

Sortiranje – pozicija kolone


Sortiranje korišćenjem numeričke pozicije kolone:

SELECT last_name, job_id, department_id, hire_date

FROM employees

ORDER BY 3;
Višestruko sortiranje
SELECT last_name, department_id, salary

FROM employees

ORDER BY department_id, salary DESC;

Sortiranje NULL vrednosti


NULLS FIRST – null vrednosti na početak

NULLS LAST - null vrednosti na kraj liste

Funkcije za obradu pojedinačnih redova


 Obrađuju podatke
 Prihvataju argumente i vraćaju jednu vrednost
 Primenjuju se na svaki vraćeni red
 Vraćaju jedan rezultat za jedan red
 Mogu modifikovati tip podatka
 Mogu biti ugnježdeni
 Prihvataju argumente koji mogu biti kolone ili izrazi

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

ROUND(55.923,-2) zaokružava na najbližu stotinu ovde će izlaz biti 100

ROUND(45.923,-2) zaokružava na najbližu stotinu ovde će izlaz biti 0

TRUNC iseca broj na n decimalnih mesta.

MOD funkcija vraća ostatak od celobrojnog deljenja.

SELECT employee_id as "Even Numbers", last_name

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.

Menjanje formata Tools/Preferences/Database/NLS

SELECT SYSDATE FROM DUAL;

CURRENT_DATE , CURRENT_TIMESTAMP
CURRENT_DATE vraća trenutni datum koji dobija iz korisničke sesije.

SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

CURRENT_TIMESTAMP vraća trenutni datum i vreme koje dobija iz korisničke sesije.

SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;

Aritmetičke operacije sa datumima


Datumi su u bazi sačuvani kao brojevi (koristimo aritmetičke operacije)

SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKS

FROM employees

WHERE department_id = 90;


Intervalne funkcije za obradu datuma

Prva funkcija vraća numeričku vrednost.

Ostale tri vraćaju vrednost tipa DATE.

Agregatne funkcije
Agregatne funkcije obrađuju grupu podataka a vaćaju jedan rezultat.

Koriste se za dobijanje izvedenih, sumarnih informacija.


AVG i SUM funkcije
Funkcije avg i sum se koriste za numeričke podatke.

SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary)

FROM employees

WHERE job_id LIKE '%REP%';

MIN i MAX funkcije


Funkcije min i max se koriste za numeričke podatke, tekst i datume.

SELECT MIN(hire_date), MAX(hire_date)

FROM employees;

COUNT funkcija
COUNT(*) vraća broj redova u tabeli:

SELECT COUNT(*)

FROM employees

WHERE department_id = 50;

COUNT(izraz) vraća broj redova sa vrednostima koje su različite od null.

SELECT COUNT(commission_pct)

FROM employees

WHERE department_id = 50;


DISTINCT ključna reč
COUNT(DISTINCT izraz) vraća broj različitih redova sa vrednostima koje su različite od null.

Primer: Broj različitih odeljenja u tabeli EMPLOYEES:

SELECT COUNT(DISTINCT department_id)

FROM employees;

Agregatne funkcije i null vrednosti


Prosek se računa samo za radnike koje primaju nadoknadu.

Agregatne funkcije ignorišu null vrednosti u koloni

SELECT AVG(commission_pct)

FROM employees;

Prosek se računa u odnosu na sve zaposlene u firmi.

NVL funkcija primorava agregatne funkcije da uključe i null vrednosti.

SELECT AVG(NVL(commission_pct, 0))

FROM employees;

GROUP BY klauzula
Group by klauzula od jedne tabele kreira više grupa.

SELECT column, group_function(column)

FROM table

[WHERE condition]

[GROUP BY group_by_expression]

[ORDER BY column];

Kolona koja se upiše u SELECT delu mora se uključiti u GROUP BY klauzulu.

U WHERE klauzuli filtrirate redove pre nego što se podele u grupe.

U GROUP BY klauzuli se ne mogu koristiti alijasi.

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:

Kolona koja se nalazi u GROUP BY ne mora biti navedena u SELECT listi.

SELECT AVG(salary)

FROM employees

GROUP BY department_id ;

Grupisanje po više kolona:

SELECT department_id, job_id, SUM(salary)

FROM employees

WHERE department_id > 40


GROUP BY department_id, job_id

ORDER BY department_id;

Restrikcija grupnih rezultata pomoću HAVING klauzule


Kada koristite HAVING klauzulu, Oracle server formira grupe na sledeći način:

1. Redovi se grupišu.

2. Primenjuje se grupna funkcija.

3. Grupe koje zadovoljavju HAVING klauzulu se prikazuju

SELECT column, group_function

FROM table

[WHERE condition]

[GROUP BY group_by_expression]

[HAVING group_condition]

[ORDER BY column];

Primer:

SELECT department_id, MAX(salary)

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.

10. U sledećoj naredbi dopisati zagrade kako bi prikaz bio 101.


11.Prikazati puno ime i prezime kao jednu kolonu i platu za one koji primaju ispod 6000$.
12. Prikazati sve podatke radnika koji se prezivaju “Khoo”.
13. Prikazati sve podatke o odeljenju Marketing.
14. Prikazati sve zaposlene koji su zaposleni pre 21.6.2002.
15. Prikazati sve podatke zaposlenih čija je plata između 8000 i 12000 i pri tome primaju
proviziju.
16. Prikazati sve podatke zaposlenih koji ne rade u odeljenju 40,120 ili 70 i koji su zaposleni pre
5.6.2005.
17. Prikazati detalje svih poslova. Poslove sortirati u rastućem poretku po nazivu posla.
18. Prikazati puno ime i prezime kao jednu kolonu i odeljenje zaposlenog čije ime ne sadrži
slovo M. Sortirati rezultate po odeljenju.
19. Prikazati ime i prezime svih radnika (u jednoj koloni) koji su zaposleni između 5.11.2007. i
5.7.2009.
20. Prikazati ime i prezime svih radnika (u jednoj koloni) koji ne primaju proviziju.
21. Prikazati ime i prezime svih radnika (u jednoj koloni) i broj odeljenja za sve radnike koji rade
u odeljenju 70 ili 90.
22. Prikazati ime, prezime i šifru odeljenja onih radnika čije je treće slovo imena slovo s.
23. Prikazati sve podatke o radniku koji u koloni job_id ima šifru SA_MAN ili SA_REP.
24. Prikazati ime i prezime svih radnika (u jednoj koloni) , datum zaposlenja, commision_pct,
email, telefon i platu ukoliko je veća od 11000. Rezultat sortirati u opadajućem redosledu po
imenu.
25. Prikazati ime i prezime zaposlenih čije ime ili prezime počinju na slovo D.
26. Zaokružiti broj 68.95657 na tri decimale i na najbližu stotinu.
27. Prikazati sve podatke o odeljenjima čiji je location_id deljiv sa 17
28. Prikazati id radnika, id odeljenja i prezime radnika ukoliko se preziva hunold. (iskoristiti
funkciju za prebacivanje u mala slova)
29. Uraditi levo i desno poravnanje imena i prezimena (koji su u jednoj koloni). Karakteri kojima
se popunjava prazan prostor je *.
30. Prikazati 4 poslednje cifre broja telefona.
31. Prikazati prosečnu platu svih zaposlenih, minimalnu i maksimalnu platu.
32. Prikazati razliku između maksimalne i minimalne plate u tabeli zaposlenih
33. Koliko ima zaposlenih sa identifikatorom odeljenja 110?
34. Koliko ima različitih gradova u tabeli lokacija?
35. Za potrebe Agencije za borbu protiv korupcije potrebno je vratiti broj radnika koji imaju isto
prezime u datoj firmi (tabela employees). Primer (Perić, Mikić, Nadić, Petrović, Perić, Lukić –
primer vraća broj 2). Pomoć: Zahtev se rešava funkcijom count i klauzulom distinct i potrebnom
logikom u select delu.
36. Prikazati id zemlje i broj gradova u okviru te zemlje.
37. Prikazati id menadžera i broj zaposlenih koji imaju istog menadžera.
38. Prikazati zaposlenog i datum kada je napustio svoj prethodni posao.
39. Prikazati id posla, broj zaposlenih sa tim identifikatorom, ukupnu platu i razliku između
najviše i najniže plate za taj identifikator posla.
40. Prikazati koliko ima zaposlenih čija je plata između 8000 i 12000 i pri tome primaju
proviziju.
41. Prikazati id radnika koji su radili dva ili više poslova u prošlosti (tabela job_history).
42. Prikazati id radnika i prosek plate samo za one radnike koji imaju prosek veći od 8000.
Izvršiti “isecanje” rezultata na dve decimale.
43. Koji radnici zaradjuju više od 50 dolara po satu. (Podrazumeva se da postoje 22 radna dana
u mesecu i 8 radnih sati u danu)
44. Prikazati broj telefona i broj telefona bez 4 poslednje cifre (umesto 4 poslednje cifre staviti *)
45. Prikazati job_id bez donje crte.

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;

You might also like