VTŠSS ČAČAK

Velja Milanović

SQL
STRUCTURED QUERY LANGUAGE

LAZAREVAC,
2013.

Structured Query Language (SQL)
 SQL – Strukturni Upitni Jezik / Structured Query Language
 standardni jezik (ANSI: ‘87, ‘92, ‘99, ‘03) za manupilaciju (relacionim) BP
● DDL (Data Definition Language) – jezik za definisanje baze podataka
• kreiranje, modifikacija i brisanje tabela i indeksa
• najznačajnije komande:
● CREATE TABLE – kreira novu tabelu u bazi podataka
● ALTER TABLE – menja strukturu postojede tabele u bazi podataka
● DROP TABLE – briše tabelu iz baze podataka

● DML (Data Manipulation Language) – jezik za manipulaciju podacima
• selekcija, brisanje, dodavanje i promena podataka
• najznačajnije komande:
● SELECT – selektuje i prikazuje podatke iz jedne ili više tabela
● UPDATE – menja podatke u tabeli
● DELETE – briše podatke iz tabele
● INSERT INTO – dodaje nove podatke u tabelu

 neproceduralni jezik – (specifikacija sta treba, ali ne i kako treba)
 proceduralno proširenje – PL/SQL

2

1

DROP TABLE MESTO. NAZIV TEXT(20). PREZIME PRIMARY KEY (JMBG). MESTO POSTA NAZIV DRZAVA MESTO POSTA NAZIV ALTER TABLE MESTO DROP DRZAVA. 4 2 . MESTO POSTA NAZIV ALTER TABLE MESTO ADD DRZAVA TEXT(20). JMBG PREZIME TEXT(20). ). 3 SQL-DDL (Data Definition Language)  ALTER TABLE – promena strukture tabele MESTO CREATE TABLE MESTO POSTA ( NAZIV POSTA TEXT(5) PRIMARY KEY. CREATE TABLE CLAN stanuje ( JMBG TEXT(13) NOT NULL. CLAN POSTA TEXT(5). IME TEXT(20). NAZIV NAZIV TEXT(20). POSTA (FK) DAT?ROD DATE. IME FOREIGN KEY (POSTA) REFERENCES MESTO DAT?ROD ).SQL-DDL (Data Definition Language)  CREATE TABLE – kreiranje tabele MESTO CREATE TABLE MESTO ( POSTA POSTA TEXT(5) NOT NULL. PRIMARY KEY (POSTA) ).

JMBG PREZIME IME 3101980 Markovic Marko 0303976 Nikolic Nikola 2905971 Petrovic Petar 1204967 Jankovic Janko 6 3 .SQL-DML (Data Manipulation Language)  SELECT – selekcija i prikaz podataka iz baze podataka Fundamentalni operatori relacione algebre: ● Restrikcija SELECT ● Projekcija WHERE SELECT ● Kartezijev proizvod FROM ● Unija UNION ● Razlika EXCEPT ● Presek INTERSECT 5 SQL-DML (Data Manipulation Language)  SELECT – selekcija i prikaz podataka iz baze podataka CLAN JMBG PREZIME IME 3101980 Markovic Marko 0303976 Nikolic Nikola 2905971 Petrovic Petar 1204967 Jankovic Janko SELECT * FROM CLAN.

NOT SELECT * FROM CLAN WHERE IME=‘Nikola’ AND DUGUJE > 0. . <=.SQL-DML (Data Manipulation Language) RESTRIKCIJA uslov(R) CLAN JMBG IME DUGUJE JMBG IME DUGUJE 3101980 Marko 0 0303976 Nikola 20 0303976 Nikola 20 2905971 Nikola 0 2905971 Nikola 0 1204967 Janko 5 SELECT * FROM CLAN WHERE IME=‘Nikola’. OR. >=. 7 SQL-DML (Data Manipulation Language) RESTRIKCIJA CLAN JMBG IME DUGUJE JMBG IME DUGUJE 3101980 Marko 0 0303976 Nikola 20 0303976 Nikola 20 2905971 Nikola 0 1204967 Janko 5 AND. . . <> 8 4 .

DUGUJE FROM CLAN. SELECT DISTINCT IME FROM CLAN. 9 SQL-DML (Data Manipulation Language) PROJEKCIJA CLAN JMBG IME DUGUJE 3101980 Marko 0 0303976 Nikola 20 2905971 Nikola 0 1204967 Janko 5 SELECT IME FROM CLAN. IME IME Marko Marko Nikola Nikola Nikola Janko Janko 10 5 .SQL-DML (Data Manipulation Language) PROJEKCIJA col3. col7. col9(R) CLAN JMBG IME DUGUJE JMBG DUGUJE 3101980 Marko 0 3101980 0 0303976 Nikola 20 0303976 20 2905971 Nikola 0 2905971 0 1204967 Janko 5 1204967 5 SELECT JMBG.

IME FROM CLAN WHERE DUGUJE=0. 11 SQL-DML (Data Manipulation Language) PROJEKCIJA + RESTRIKCIJA CLAN JMBG IME DUGUJE 3101980 Marko 0 JMBG DUGUJE 0303976 Nikola 20 0303976 20 2905971 Nikola 0 1204967 Janko 5 SELECT JMBG.SQL-DML (Data Manipulation Language) PROJEKCIJA + RESTRIKCIJA c3. DUGUJE FROM CLAN WHERE DUGUJE>=10 AND DUGUJE<=100. WHERE DUGUJE BETWEEN 10 AND 100 12 6 . c9 (uslov(R)) CLAN JMBG IME DUGUJE 3101980 Marko 0 JMBG IME 0303976 Nikola 20 3101980 Marko 2905971 Nikola 0 2905971 Nikola 1204967 Janko 5 SELECT JMBG. c7.

WHERE IME LIKE ‘*o’. DUGUJE*2 AS DUG FROM CLAN FROM CLAN WHERE DUGUJE > 0. SQL-DML (Data Manipulation Language) operator LIKE ? -> jedan znak CLAN * -> više znakova JMBG IME DUGUJE 3101980 Marko 0 0303976 Nikola 20 2905971 Nikola 0 1204967 Janko 5 SELECT DISTINCT IME SELECT DISTINCT IME SELECT DISTINCT IME FROM CLAN FROM CLAN FROM CLAN WHERE IME LIKE ‘?a*’. CLAN DUG JMBG DUG 0303976 20 0303976 40 1204967 5 1204967 10 14 7 . DUGUJE AS DUG SELECT JMBG. IME IME IME Marko Marko Marko Janko Nikola Janko Janko 13 SQL-DML (Data Manipulation Language) PREIMENOVANJE IZRAČUNATE VREDNOSTI CLAN JMBG IME DUGUJE 3101980 Marko 0 0303976 Nikola 20 2905971 Nikola 0 1204967 Janko 5 SELECT JMBG AS CLAN. WHERE DUGUJE > 0. WHERE IME LIKE ‘*k*’.

IME ASC. ORDER BY DUGUJE DESC. JMBG IME DUGUJE 0303976 Nikola 20 JMBG IME DUGUJE 1204967 Janko 5 0303976 Nikola 20 3101980 Marko 0 1204967 Janko 5 2905971 Nikola 0 15 SQL-DML (Data Manipulation Language) AGREGATNE funkcije MAX(izraz) MIN(izraz) COUNT(izraz) CLAN SUM(izraz) JMBG IME DUGUJE AVG(izraz) 3101980 Marko 0 0303976 Nikola 20 2905971 Nikola 0 1204967 Janko 5 SELECT MAX(DUGUJE) AS MAX?DUG MAX?DUG FROM CLAN.SQL-DML (Data Manipulation Language) SORTIRANJE CLAN JMBG IME DUGUJE 3101980 Marko 0 0303976 Nikola 20 2905971 Nikola 0 1204967 Janko 5 SELECT * SELECT * FROM CLAN FROM CLAN WHERE DUGUJE > 0 ORDER BY DUGUJE DESC. 16 8 . 25 SELECT COUNT(*) AS DUZNICI DUZNICI FROM CLAN 2 WHERE DUGUJE>0. 20 SELECT SUM(DUGUJE) AS UKUPNO UKUPNO FROM CLAN.

preko 1000. SELECT IDKUPCA. 17 GRUPISANJE PODATAKA Sledede. GRUPISANJE PODATAKA Jedan specijalan način upotrebe operatora GROUP BY je povezivanje neke agregatne funkcije sa grupom redova (ovo se naročito odnosi na funkciju COUNT koja broji redove u svakoj grupi). MAX(CENA) pretpostavimo da želimo da dobijemo FROM ANTIKVITETI najvišu cenu kupovine za antikvitete koji su GROUP BY IDKUPCA kupljeni za iznos HAVING CENA > 1000. MAX(CENA) FROM ANTIKVITETI GROUP BY IDKUPCA. Zato SQL-u moramo da kažemo da grupiše kupovine svakog vlasnika i izdvoji najvišu cenu kupovine: SELECT IDKUPCA. Pretpostavimo najpre da tabela Antikviteti ima kolonu Cena i da svaki red ima neku vrednost u toj koloni. Želimo da dobijemo cenu najskupljeg antikviteta koji je kupio svaki vlasnik. Za taj slučaj koristimo klauzulu HAVING: 18 9 .

zatim se izračunavaju grupne funkcije. klauzula HAVING ograničava izbor grupa dobijenih klauzulom GROUP BY. 19 GRUPISANJE PODATAKA Ako u klauzulu SELECT uključite grupnu funkciju (AVG. GRUPISANJE PODATAKA Kao što se klauzula WHERE koristi da se ograniči izbor redova. tako se klauzula HAVING koristi za ograničen izbor grupa. Za definisanje uslova selekcije na osnovu vrednosti grupnih funkcija koristi se klauzula HAVING 20 10 .  Klauzula WHERE se koristi da ograniči izbor redova koji se grupišu. Alijasi kolona se ne mogu koristiti u klauzuli GROUP BY.  Ako upit koristi klauzule GROUP BY i HAVING. prvo se grupišu redovi. a zatim se prikazuju samo one grupe koje su saglasne sa klauzulom HAVING. Klauzula WHERE isključuje vrste (redove) pre njihove podele na grupe. MAX. SUM. COUNT. STDDEV. VARIANCE) i još neku pojedinačnu kolonu. svaka tako navedena pojedinačna kolona mora biti navedena i u klauzuli GROUP BY. MIN. Zato se grupne funkcije ne mogu koristiti u klauzuli WHERE.

22 11 . Janko 1 SELECT IME. Marko 1 21 SQL-DML (Data Manipulation Language) GRUPISANJE PODATAKA GROUP BY CLAN HAVING IME MESTO DUGUJE Marko LJIG 10 Nikola LAJKOVAC 20 Nikola VALJEVO 0 Janko LAJKOVAC 5 SELECT IME. IME ASC. COUNT(IME) AS UKUPNO FROM CLAN WHERE DUGUJE>0 MESTO UKUPNO GROUP BY MESTO LAJKOVAC 2 HAVING COUNT(IME)>1 ORDER BY MESTO. COUNT(IME) AS UKUPNO Marko 1 FROM CLAN Nikola 2 GROUP BY IME. COUNT(IME) AS UKUPNO FROM CLAN IME UKUPNO GROUP BY IME Nikola 2 HAVING COUNT(IME)>1.SQL-DML (Data Manipulation Language) GRUPISANJE PODATAKA GROUP BY CLAN JMBG IME DUGUJE 3101980 Marko 0 0303976 Nikola 20 2905971 Nikola 0 1204967 Janko 5 IME UKUPNO SELECT IME. SELECT MESTO. COUNT(IME) AS UKUPNO IME UKUPNO FROM CLAN Nikola 2 GROUP BY IME Janko 1 ORDER BY UKUPNO DESC.

Citaoci.ID_Citalac) ON Knjige.Izdavac. 24 12 .ID_Citalac = Poslovanje.Dat_vr FROM Knjige INNER JOIN (Citaoci INNER JOIN Poslovanje ON Citaoci. Knjige. Knjige.ID_Citalac. Poslovanje.Izdavac)="LAGUNA")).ID_Citalac = Poslovanje.Prezime_Ime. Poslovanje.ID_Knjiga WHERE ((Not (Knjige.ID_Citalac.ID_Knjiga = Poslovanje. UNUTRAŠNJE SPAJANJE 23 Spajanje tabela SELECT Citaoci.Dat_izd.Naslov. Spajanje tabela SELECT Prezime_Ime. Dat_izd FROM Citaoci INNER JOIN Poslovanje ON Citaoci.

Spajanje tabela SELECT Count(Poslovanje.ID_Knjiga = Poslovanje. Podupit se izvršava jednom pre glavnog upita.Naslov Alijas se ne HAVING (((Count(Poslovanje. Spoljašnji i unutrašnji upit mogu uzeti podatke iz različitih tabela (jedan iz jedne. Podupit ne može imati sopstvene klauzule ORDER BY.ID_Citalac))<3)). 26 13 .ID_Citalac) ON Knjige. drugi iz druge).ID_Citalac = Poslovanje. 1. Podupiti se daju u zagradi. 4. Samo jedna klauzula ORDER BY može biti uključena u jednu SELECT-rečenicu i ona mora biti poslednja klauzula spoljašnjeg upita. 2.ID_Citalac) AS [BROJ CITALACA]. sme koristiti u uslovu U uslovu se koristi ime polja 25 Podupit je SELECT-rečenica ugneždena u neku klauzulu ili drugu SELECT-rečenicu. 5.Naslov FROM Knjige INNER JOIN (Citaoci INNER JOIN Poslovanje ON Citaoci. Glavni ili spoljašnji upit koristi rezultat podupita.ID_Knjiga GROUP BY Knjige. Podupit je uvek na desnoj strani uslova poređenja. Knjige. 3.

klauzula IN je bolji izbor. a zatim se prikazuju ID brojevi kupaca za svaki komad nameštaja koji je koštao iznad tog iznosa. Podupit kao rezultat daje spisak kupaca. 28 14 .PODUPITI SELECT IDKUPCA FROM ANTIKVITETI WHERE CENA > (SELECT AVG(CENA) + 100 FROM ANTIKVITETI).PODUPITI Prikažimo prezimena onih vlasnika samo ukoliko su kupili neki antikvitet: SELECT PREZIMEVLASNIKA FROM VLASNICIANTIKVITETA WHERE IDVLASNIKA IN (SELECT DISTINCT IDKUPCA FROM ANTIKVITETI). Napomena: u nekim implementacijama mogu se koristiti jednakosti umesto IN. Podupit izračunava prosečnu cenu plus 100. a prezime vlasnika antikviteta prikazuje se ako i samo ako ID broj vlasnika pripada rezultatu podupita (koji se ponekad naziva lista kandidata). 27 UGNJEŽDENI UPITI . UGNJEŽDENI UPITI . ali zbog razumljivosti pošto je rezultat podupita neki skup. Da bismo eliminisali duplikate. mogli smo da navedemo DISTINCT IDKUPCA.

Janko SELECT DUGUJE FROM CLAN DUGUJE WHERE DUGUJE > ALL 20 (SELECT DUGUJE FROM CLAN WHERE IME<‘N’). ako imate "WHERE ImeKolone = (SELECT. klauzula SELECT mora sadržati samo jednu kolonu koja odgovara koloni ImeKolone u spoljašnjoj klauzuli WHERE i njihov tip mora biti odgovarajudi (oba tipa su celi brojevi. 30 15 . 29 SQL-DML (Data Manipulation Language) UGNJEŽDENI UPITI CLAN JMBG IME DUGUJE 3101980 Marko 0 0303976 Nikola 20 2905971 Nikola 0 1204967 Janko 5 SELECT IME FROM CLAN IME WHERE DUGUJE = ( SELECT MAX(DUGUJE) FROM CLAN). UGNJEŽDENI UPITI . Nikola SELECT IME FROM CLAN IME WHERE DUGUJE IN Nikola (SELECT DUGUJE FROM CLAN WHERE DUGUJE>0).. klauzula SELECT u tom podupitu mora imati kolone koje se poklapaju po broju i tipu sa onima koje se nalaze u klauzuli WHERE spoljašnjeg upita.). Drugim rečima.".PODUPITI Kada je podupit deo nekog WHERE uslova.). znakovne niske itd..

0303976 Nikolic Nikola 2905971 Petrovic Petar CLAN INSERT INTO CLAN (JMBG. IME) SELECT PREZIME.SQL-DML (Data Manipulation Language)  INSERT – dodavanje podataka u tabelu CLAN JMBG PREZIME IME 3101980 Markovic Marko 0303976 Nikolic Nikola CLAN JMBG PREZIME IME INSERT INTO CLAN 3101980 Markovic Marko VALUES (‘2905971’. CLAN JMBG PREZIME IME 3101980 Markovic Marko 0303976 Nikolic Nikola Andric Ivo Copic Branko 32 16 . 3101980 Markovic Marko 0303976 Nikolic Nikola 2905971 Petrovic Petar 1204967 Jankovic 31 SQL-DML (Data Manipulation Language)  INSERT – dodavanje podataka u tabelu CLAN AUTOR JMBG PREZIME IME SIFRA PREZIME IME 3101980 Markovic Marko 1010 Andric Ivo 0303976 Nikolic Nikola 2115 Copic Branko INSERT INTO CLAN (PREZIME. ‘Jankovic’). PREZIME) JMBG PREZIME IME VALUES (‘1204967’. ‘Petar’). ‘Petrovic’. IME FROM AUTOR.

2905971 Nikola 74000 CLAN DELETE FROM CLAN JMBG IME MESTO WHERE MESTO = 3101980 Marko 74000 ( SELECT MAX(MESTO) FROM CLAN ). 2905971 Slavko 0 1204967 Janko 0 34 17 .SQL-DML (Data Manipulation Language)  DELETE – brisanje podataka iz tabele CLAN JMBG IME MESTO 3101980 Marko 74000 0303976 Nikola 79000 2905971 Nikola 74000 CLAN 1204967 Janko 79000 JMBG IME MESTO 3101980 Marko 74000 DELETE FROM CLAN 0303976 Nikola 79000 WHERE IME=‘Janko’. 2905971 Nikola 74000 CLAN DELETE * FROM CLAN. JMBG IME MESTO 33 SQL-DML (Data Manipulation Language)  UPDATE – promena vrednosti u tabeli CLAN JMBG IME DUGUJE UPDATE CLAN 3101980 Marko 0 SET IME=‘Slavko’. 2905971 Nikola 0 CLAN 1204967 Janko 5 JMBG IME DUGUJE 3101980 Marko 0 UPDATE CLAN 0303976 Nikola 20 SET DUGUJE = DUGUJE-5 2905971 Slavko 50 WHERE DUGUJE>=5. 1204967 Janko 5 CLAN JMBG IME DUGUJE 3101980 Marko 0 CLAN 0303976 Nikola 15 JMBG IME DUGUJE 2905971 Slavko 45 3101980 Marko 0 1204967 Janko 0 0303976 Nikola 0 UPDATE CLAN SET DUGUJE 0. DUGUJE=50 0303976 Nikola 20 WHERE JMBG=‘2905971’.

Related Interests