You are on page 1of 9

Standardni upitni jezik SQL

(Structured Query Language)


Kategorije SQL naredbi
• Naredbe za definisanje podataka (DDL - Data Definition Language) omogućuju definisanje
objekata baze:

CREATE TABLE (kreiranje tabele baze podataka)

CREATE VIEW (kreiranje virtuelne tabele – “pogleda”)

CREATE INDEX (kreiranje indeksa nad kombinacijom kolona tabele)

ALTER TABLE (izmena definicije tabele)

DROP TABLE (izbacivanje tabele iz baze)

• Naredbe za manipulisanje (rukovanje) podacima (DML - Data Manipulation Language)


omogućuju ažuriranje i prikaz prikaz podataka baze:

SELECT (prikaz sadržaja relacione baze podataka)

UPDATE (izmena vrednosti kolona tabele)

DELETE (izbacivanje redova tabele)

INSERT (dodavanje redova postojedoj tabeli)

• Naredbe za kontrolne (upravljačke) funkcije (DCL - Data Control Language) omogućuju


oporavak, konkurentnost, sigurnost i integritet relacione baze podataka:

GRANT (dodela prava korišdenja sopstvene tabele drugim korisnicima)

REVOKE (oduzimanje prava korišdenja sopstvene tabele od drugih korisnika)

COMMIT (prenos dejstava transakcije na bazu podataka)

ROLLBACK (poništavanje dejstava transakcije)

1
Upiti nad jednom tabelom kojima se prikazuje prost, neizmenjen sadržaj tabele

Upiti tipa projekcije

Select upiti

Ovi upiti uzimaju podatke iz jedne ili više tabela i prikazuje ih u odgovarajućoj formi. Opšti oblik
select upita je:

SELECT <lista kolona>


FROM <lista tabela>
[WHERE <restriktivni uslov>]
[GROUP BY <ime kolone ili kolona upotrebljenih u klauzuli SELECT>]
[HAVING <restriktivni uslov baziran na rezultatima GROUP BY klauzule>]
[ORDER BY <lista kolona>]

Najjednostavniji oblik SELECT upita

Najjednostavniji oblik select upita je:


SELECT <lista kolona>
FROM <lista tabela>

Primer 1. Prikazati celokupan sadržaj tabele PREDMET.

SELECT predmet.predmetID, predmet.naziv, predmet.profesor


FROM predmet;
ili
SELECT predmet.*
FROM predmet;

NAPOMENA: Svaki upit je neophodno završiti tačka zarezom (;).

Primer 2. Prikazati brojeve indexa i imena svih upisanih studenata.


SELECT student.studentID, student.ime
FROM student;

Primer 3. Prikazati prvih deset prijava.


SELECT *
FROM prijava
LIMIT 10;

2
Primer 4. Prikazati drugih deset prijava.
SELECT *
FROM prijava
LIMIT 10,10;

Primer 5. Koliko studenata je dobilo ocenu 10?


SELECT SQL_CALC_FOUND_ROWS ocena FROM prijava WHERE ocena = 10;
SELECT FOUND_ROWS();

Upotreba predikata DISTINCT

Ovaj predikat se koristi kada je potrebno da se prikažu samo različite vrednosti atributa.

Primer 6. Prikazati šifre svih predmeta koji su prijavljeni.

SELECT prijava.predmetID
FROM prijava;

Ali, prethodni upit vraća i ponovljene vrednosti atributa.

Pravilno je upotrebiti predikat distinct:

SELECT DISTINCT prijava.predmetID


FROM prijava;

Klauzula WHERE

Primer 7. Prikazati sve studente koji su upisani 2007. godine.


SELECT student.*
FROM student
WHERE (((student.GodinaUpisa)=2007));

Primer 8. Prikazati sve studente koji su upisani 2008. ili 2009.godine.

SELECT student.*
FROM student
WHERE (((student.GodinaUpisa)=2008)) OR (((student.GodinaUpisa)=2009));

3
Primer 9. Prikazati imena svih studenta koji su upisani 2007. godine i čiji je prosek iznad 7.

SELECT student.ime
FROM student
WHERE (((student.GodinaUpisa)=2007) AND ((student.prosek)>7));

Primer 10. Prikazati ime i broj indeksa studenata koji se zovu Sandra i Ana. Koristiti operator IN.

SELECT student.studentID, student.ime


FROM student
WHERE (((student.ime) In ('Sandra','Ana')));

Primer 11. Prikazati ime i broj indeksa studenata koji nisu upisani 2007. Koristiti operator not.

select ime, studentid, godinaupisa


from student
where not godinaupisa=2007;

Tabela 1 – Najčešće korišćeni operatori u klauzuli WHERE


OPERATOR PRIMER OBJAŠNJENJE
1. student.studentID = 11  Standardni operatori poređenja
=, <, >,
2. student.ime = 'Petar'  Tekstualni atributi se stavljaju
<=, >=, <>
3. student.GodinaUpisa <= 2000 pod apostrofe (’ ’)
 Standardni logički operatori
AND, OR, 4. student.prosek >= 8 AND
 Prioritet: NOT, AND, OR
NOT student.smerID = 1001
 Zagrade menjaju prioritet
 Ako se vrednost atributa nalazi
5. Student.GodinaUpisa
BETWEEN između graničnih vrednosti,
BETWEEN 1998 AND 2002
uključujući i njih izraz je tačan
 Operator za pretraživanje
6. student.ime LIKE 'J%'
7. student.ime LIKE '_e%'  Moguće je koristiti džoker
LIKE znake
8. student.ime LIKE '%a%'
o (_) – menja jedan znak
9. student.ime LIKE '%a_'
o (%) – menja sve znake
10. student.GodinaUpisa IN
 Vrednost izraza je tačna ako se
(2007, 2008)
IN, NOT IN vrednost atributa nalazi u datom
11. student.ime NOT IN
skupu koji slede iza reči IN
('Jelena', 'Maja')

4
NULL vrednosti
Kad neko polje nije definisano, tj. nema nikakve vrednosti u njemu za to polje se kaže da ima NULL
vrednost. Na primer u tabeli Predmet se može primetiti da za neke predmete nije upisano ime profesora, a to
je iz razloga što ti profesori nisu stalno zaposleni i menjaju se iz godine u godinu.

Primer 12. Prikazati nazive predmeta koji nemaju stalnog profesora, tj. nemaju ime profesora.

SELECT predmet.naziv
FROM predmet
WHERE (((predmet.profesor) Is Null));

Primer 13. Prikazati nazive predmeta koji imaju stalnog profesora.

SELECT predmet.naziv
FROM predmet
WHERE (((predmet.profesor) Is Not Null));

Klauzula ORDER BY

Ova klauzula se koristi prilikom sortiranja. Sortiranje može biti u rastućem (ASCENDING) i
opadajućem redosledu (DESCENDING).

NAPOMENA: Pošto je podrazumevano sortiranje u rastućem redosledu nije neophodno pisati ASC u
klauzuli ORDER BY.

Primer 14. Prikazati u opadajućem redosledu imena onih studenata koji imaju prosek ispod 8.

SELECT student.ime
FROM student
WHERE (((student.prosek)<8))
ORDER BY student.ime DESC;

Primer 15. Prikazati u rastućem redosledu prosek i imena onih studenata koji su se upisali posle 2008.
godine.

SELECT student.prosek, student.ime


FROM student
WHERE (((student.GodinaUpisa)>2008))
ORDER BY student.prosek;

5
Primer 16. Prikazati ocene studenta sa brojem indeksa 10120081 sortiranih po opadajućem poretku
ocena.
SELECT *
FROM prijava
WHERE studentid = 10120081
ORDER BY ocena DESC;

Primer 17. Prikazati prve tri šifre predmeta za koje je studenta sa brojem indeksa 10120081 dobio
najveće ocene.

SELECT *
FROM prijava
WHERE studentid = 10120081
ORDER BY ocena DESC
LIMIT 3;

Klauzule GROUP BY i HAVING


Klauzula GROUP BY služi za grupisanje rezultata upita po određenom kriterijumu. Klauzula
HAVING se koristi kako bi se uspostavili uslovi koji se odnose na same grupe, za razliku od klauzule
WHERE koja se primenjuje na sve zapise u tabeli.
Ove dve klauzule se obično koriste u kombinaciji sa nekom agregatnom funkcijom. Sledi tabela
osnovnih agregatnih funkcija (Tabla 2).

Tabela 2 – Tabela osnovnih agregatnih funkcija

FUNKCIJA OPIS

Avg ( ) Prosek vrednosti u jednoj koloni

Count ( ) Ukupan broj vrednosti nekog polja koja su Not Null

Max ( ) Najveća vrednost nekog polja

Min ( ) Najmanja vrednost nekog polja

Sum ( ) Ukupan zbir vrednosti jednog polja

Primer 18. Prikazati ukupnu školarinu za smer sa šifrom 602.


SELECT student.smerID, Sum(student.skolarina) AS 'Ukupna skolarina'
FROM student
GROUP BY student. smerID
HAVING (((student. smerID)=602));

6
Primer 19. Prikazati prosečnu školarinu za sve upisane studente zaokruženu na dve decimale.
SELECT Round(Avg(student.skolarina),2) AS 'Prosecna skolarina'
FROM student;

Primer 20. Prikazati prosečnu školarinu po smeru.


SELECT SmerID, AVG(Skolarina) AS 'Prosecna skolarina'
FROM Student
GROUP BY SmerID

Primer 21. Prikazati prosečnu školarinu za smer 101.


SELECT AVG(Skolarina) AS 'Prosecna skolarina', SmerID
FROM Student
GROUP BY SmerID
HAVING (SmerID = 101)

Primer 22. Prebrojati koliko ima studenata na smeru 602.

SELECT count(StudentID) AS 'Ukupan broj', SmerID


FROM Student
GROUP BY SmerID
HAVING (SmerID = 602)

Primer 23. Za godinu upisa 2008 pronaći najveću školarinu.

SELECT MAX(Skolarina) AS 'Max skolarina', GodinaUpisa


FROM Student
GROUP BY GodinaUpisa
HAVING GodinaUpisa=2008;

Primer 24. Prebrojati koliko predmeta predaje profesor Terzić.

SELECT COUNT(PredmetID) AS 'broj predmeta'


FROM Predmet
GROUP BY Profesor
HAVING (Profesor = 'Terzić');

7
Primer 25. Pronaći koliko predmeta drži svaki profesor.

I način
SELECT Profesor, COUNT(PredmetID) AS 'Broj predmeta'
FROM Predmet
WHERE (Profesor IS NOT NULL)
GROUP BY Profesor;

II način
select profesor, count(predmetid) as 'Ukupno predmeta'
from predmet
group by profesor
having profesor is not null;

Primer 26. Odrediti koliko različitih predmeta je položeno.

SELECT COUNT (DISTINCT prijava.predmetID)


FROM prijava;

Primer 27. Ispisati ime i prezime studenata na smeru Internet programiranje.

I način – bez spajanja tabela

SELECT Student.Ime, Student.Prezime, Smer.Naziv


FROM Smer, Student
WHERE (Smer.SmerID = Student.SmerID) and (Smer.Naziv = 'Internet programiranje');

II način – sa spajanjem tabela

SELECT Student.Ime, Student.Prezime, Smer.Naziv


FROM Smer INNER JOIN
Student ON Smer.SmerID = Student.SmerID
WHERE (Smer.Naziv = 'Internet programiranje');

Zadaci za vežbu:
1. Prikazati nazive svih predmeta koji počinju na slovo e.
2. Prikazati imena svih profesora koji imaju slovo v u svome prezimenu.
3. Prikazati sve podatke o studentima koji su upisani pre 2008. godine i imaju prosek ispod 8.
4. Prikazati imena i brojeve indexa onih studenata čije se ime završava na slovo a i koji plaćaju školarinu.
5. Prikazati imena studenata koji ne plaćaju školarinu i imaju prosek iznad 7.60.
6. Prikazati brojeve indexa i imena studenata koji su se upisali 2007. godine na smeru sa šifrom 201.
Prikaz urediti u opadajucem redosledu imena.

8
7. Prikazati u opadajućem redosledu nazive smerova koji imaju slovo s u nazivu.
8. Prikazati ukupan broj studenata koji su dobili ocenu 8 iz bilo kog predmeta.
9. Prikazati prosečnu ocenu na predmetu sa šifrom 100204 i zaokružiti na dve decimale.
10. Prikazati maksimalnu i minimalnu školarinu koju studenti plaćaju.

You might also like