bp 9 sql
TRANSCRIPT
-
8/18/2019 BP 9 SQL
1/67
1
UNIVERZITET U
KRAGUJEVCU
EKONOMSKI FAKULTET
www.ekfak.kg.ac.rs
-
8/18/2019 BP 9 SQL
2/67
2
Predmet
BAZE PODATAKA
Dr Vladimir Ranković, DocentE-mail: [email protected]
-
8/18/2019 BP 9 SQL
3/67
3
Poglavlje 4
Standardni upitni jezik SQL
-
8/18/2019 BP 9 SQL
4/67
4
SQL
Nastao 1974. god. od strane Donalda D. Chamberlina i Raymond F.Boyce u IBM-ovoj istraživačkoj laboratoriji.
Etape u razvoju:
1986. god.: SQL-86Usvojen za standardni relacioni upitni jezik deklarativnog
(neproceduralnog) tipa.
1989. god.: SQL–89Definisani standardi koji se odnose na očuvanje integriteta baze podataka ipovezivanje sa drugim programskim jezicima.
1992. god.: SQL-92
1999. god.: SQL-1999Uveden mehanizam trigera (okidača), uvedena određena proceduralnaproširenja itd.
-
8/18/2019 BP 9 SQL
5/67
5
SQL
Tipovi podataka (predefinisani domeni) u SQL-u:
Numerički tipovi podataka:
Tačni:
INTEGER (INT),
SMALLINT,
NUMERIC (NUMERIC(p), NUMERIC(p,d)),
DECIMAL (DECIMAL(p), DECIMAL(p,d)).
Približni:
REAL,
DOUBLE PRECISION,
FLOAT(p).
-
8/18/2019 BP 9 SQL
6/67
6
SQL
Tipovi podataka (predefinisani domeni) uSQL-u:
Tekstualni tipovi podataka:
CHARACTER(broj karaktera) ili CHAR(brojkaraktera),
CHARACTER VARYING(maksimalni broj karaktera)
ili VARCHAR(maksimalni broj karaktera),
CHARACTER LARGE OBJECT(maksimalni brojkaraktera) ili CLOB(maksimalni broj karaktera).
-
8/18/2019 BP 9 SQL
7/67
7
SQL
Tipovi podataka (predefinisani domeni) u SQL-u:
Datumski tipovi podataka:
DATE(YYYY-MM-DD),
TIME
(HH:MM:SS),
TIMESTAMP – objedinanjava TIME i DATE(YYYY-MM-DD: HH:MM:SS),
TIME WITH TIME ZONE(HH:MM:SS+HH:MM)
TIMESTAMP WITH TIME ZONE
(YYYY-MM-DD: HH:MM:SS +HH:MM)
-
8/18/2019 BP 9 SQL
8/67
8
SQL
Tipovi podataka (predefinisani domeni) u
SQL-u:
Intervalni tipovi podataka:
INTERVAL YEAR,
INTERVAL MONTH,
INTERVAL YEAR TO MONTH, itd.
Logički tip podatka BOOLEAN (TRUE, FALSE,
UNKNOWN)
-
8/18/2019 BP 9 SQL
9/67
9
SQL
Definisanje domena
Predefinisani domeni
Korisnički domeni
predefinisani domen nad kojim je definisan,
default vrednost,
0, 1 ili više ograničenja.
-
8/18/2019 BP 9 SQL
10/67
10
SQL
Definisanje domena
Opšta sintaksa:
CREATE DOMAIN AS [DEFAULT ][[CONSTRAINT ] CHECK (ograničenje)]
Primer 1:
Domen novac:CREATE DOMAIN novac AS DECIMAL (7,2)
Primer 2:
Domen vrsta_racuna:CREATE DOMAIN vrsta_racuna AS CHAR (1)DEFAULT ‘L’CONSTRAINT vrsta_racuna_proveraCHECK (value IN (‘L’, ‘R’, ‘P’))
-
8/18/2019 BP 9 SQL
11/67
11
SQL
Promena domena
Opšta sintaksa:
ALTER DOMAIN SET DEFAULT |
DROP DEFAULT | ADD [CONSTRAINT ] CHECK(ograničenje) |DROP CONSTRAINT < naziv ograničenja >
Eliminisanje domena:
DROP DOMAIN
-
8/18/2019 BP 9 SQL
12/67
12
SQL
Tabele i kolone – osnovna svojstva
SQL radi sa tabelama
Tabelu čini uređena klekcija od jedne ili više kolona i
neuređena kolekcija od nula ili više redova.
Kolona odgovara atributu i ima svoje ime i tip podatka
odnosno domen nad kojim je atribut definisan.
Red je najmanja jedinica podatka koji se može uneti u
tabelu ili izbrisati iz nje.
-
8/18/2019 BP 9 SQL
13/67
13
SQL
Vrste tabela
Bazna tabela
Tabela čiji su podaci memorisani na disku ili u radnoj memoriji.
Ne može da ima dve kolone sa istim nazivom.
Izvedena tabela
Tabela koja je rezultat izvršavanja upita.
Može imati više kolona sa istim nazivom.
Tabela pogleda
Imenovani upit koji se može izvršiti korišćenjem datog imena.Rezultat je tabela pogleda.
Ne može da ima dve kolone sa istim nazivom.
-
8/18/2019 BP 9 SQL
14/67
14
SQL Kreiranje tabela
Opšta sintaksa:
CREATE TABLE ( [NOT NULL],
[NOT NULL],...);
Primer 1:
Tabela RADNIK:
CREATE TABLE RADNIK
(SRADNIK INTEGER NOT NULL,IME VARCHAR (20) NOT NULL,POSAO VARCHAR (20),SRUKOV INTEGER,DATZAP DATE,PLATA NUMERIC,PREMIJA NUMERIC,ODELJENJE# INTEGER NOT NULL);
Primer 2:
Tabela ODELJENJE:
CREATE TABLE ODELJENJE(ODELJENJE# INTEGER NOT NULL, NAZIV VARCHAR (20) NOT NULL,GRAD VARCHAR (20) );
-
8/18/2019 BP 9 SQL
15/67
15
SQL
Izmena tabela
Dodavanje nove kolone, promena definicije postojeće kolone,
izbacivanje kolone, dodavanje ili izbacivanje ograničenja navrednost podatka kolone.
Dodavanje nove kolone:
ALTER TABLE ADD [COLUMN]
Primer:
Dodavanje kolone BROJ_RADNIKA u tabelu ODELJENJE:
ALTER TABLE ODELJENJE
ADD COLUMN BROJ_RADNIKA NUMERIC (4);
-
8/18/2019 BP 9 SQL
16/67
16
SQL
Izmena tabela
Izmena definicije postojeće kolone:
ALTER TABLE
ALTER COLUMN SET DEFAULT |DROP DEFAULT;
Primer 1:
Postavljanje default vrednosti za kolonu GRAD u tabeli ODELJENJE: ALTER TABLE ODELJENJE ALTER COLUMN GRAD
SET DEFAULT ‘KRAGUJEVAC’;
Primer 2:
Izbacivanje default vrednosti za kolonu DATZAP u tabeli RADNIK:
ALTER TABLE RADNIK ALTER COLUMN DATZAP
DROP DEFAULT;
-
8/18/2019 BP 9 SQL
17/67
17
SQL
Izmena tabela
Izbacivanje kolone iz tabele:
ALTER TABLE DROP COLUMN
Primer 1:
Izbacivanje kolone BROJ_RADNIKA iz tabeleODELJENJE:
ALTER TABLE ODELJENJEDROP COLUMN BROJ_RADNIKA;
-
8/18/2019 BP 9 SQL
18/67
18
SQL
Izbacivanje tabela
Opšti oblik:
DROP TABLE
Primer 1:
Izbacivanje tabele RADNIK:
DROP TABLE RADNIK;
Razlika između DROP TABLE i DELETE!
-
8/18/2019 BP 9 SQL
19/67
19
SQL
Ograničenje UNIQUE
UNIQUE ograničenje je zadovoljeno ako i samo ako ne postoje dve vrste bazne tabele sa istimNOT NULL vrednostima u kolonama nad kojima je ograničenje postavljeno. NULL vrednosti
se tretiraju kao nedefinisane vrednosti tj. nejednake vrednosti.
UNIQUE kao ograničenje kolone:
CREATE TABLE RADNIK (....
MLB CHAR (13) UNIQUE,........);
UNIQUE kao ograničenje tabele:
CREATE TABLE RADNIK
(.... MLB CHAR (13),
....
UNIQUE (MLB),
....);
UNIQUE nad više kolona:
UNIQUE(, , ...)
-
8/18/2019 BP 9 SQL
20/67
20
SQL
Ograničenje PRIMARY KEY
Pomoću ovog ograničenja se definiše primarni ključ tabele. Ovo ograničenje je
zadovoljeno ako i samo ako ne postoje dva reda bazne tabele sa istimvrednostima u kolonama nad kojima je ograničenje specificirano i ne postoji ni jedna nedefinisana (NULL) vrednost u navedenim kolonama.
Opšta sintaksa 1:
CREATE TABLE RADNIK (SRADNIK INTEGER PRIMARY KEY,........);
CREATE TABLE ODELJENJE
(ODELJENJE# INTEGER PRIMARY KEY,........);
SQL-89 standard je zahtevao da se specificira i ograničenje NOT NULL.
SQL-92 dozvoljava da se definiše samo PRIMARY KEY, pri čemu se ograničenjeNOT NULL podrazumeva.
-
8/18/2019 BP 9 SQL
21/67
21
SQL
Ograničenje PRIMARY KEY
Opšta sintaksa 2:
U slučaju da se ograničenje PRIMARY KEY definiše kao ograničenje tabelesintaksa je sledeća:
CREATE TABLE RADNIK (SRADNIK INTEGER NOT NULL,
....CONSTRAINT RADNIK_PK PRIMARY KEY (SRADNIK),
....);
CREATE TABLE ODELJENJE(ODELJENJE# INTEGER NOT NULL,....
CONSTRAINT ODELJENJE_PK PRIMARY KEY (ODELJENJE#),....);
U slučaju složenog ključa (primarni ključ čini više atributa (kolona)) onda se ovoograničenje isključivo setuje kao ograničenje tabele
CONSTRAINT PRIMARY KEY (,naziv kolone2>,...)
-
8/18/2019 BP 9 SQL
22/67
22
SQL
Rerefencijalno ograničenje (FOREIGN KEY)
Pojam referencirane i referencirajuće tabele:
Referencirana tabela je bazna tabela na čiju jednu ili više kolona se referenciraju kolonereferencirajuće tabele.
Referencirane kolone u referenciranoj tabeli moraju da imaju ograničenje tipa PRIMARY KEY iliUNIQUE.
Referencirajuća tabela je bazna tabela čije se, jedna ili više, kolona referenciraju na referencionekolone referencione tabele. Te kolone se nazivaju referencirajuće kolone.
Primer:
Tabela RADNIK je referencirajuća tabela zato što se njena kolona RADNIK.ODELJENJE#referencira na kolonu ODELJENJE.ODELJENJE#.
Kolona ODELJENJE.ODELJENJE# je primarni ključ tabele ODELJENJE.
Tabela ODELJENJE je referencirana tabela.
Opšta sintaksa 1:
CREATE TABLE RADNIK (.......ODELJENJE# NOT NULL
REFERENCES ODELJENJE (ODELJENJE#),....);
-
8/18/2019 BP 9 SQL
23/67
23
SQL
Rerefencijalno ograničenje (FOREIGN KEY)
Opšta sintaksa 2:Referencijalno ograničenje definisano kao ograničenje tabele.
CREATE TABLE RADNIK (.......CONSTRAINT ODELJENJE_FK FOREIGN KEY (ODELJENJE#)
REFERENCES ODELJENJE (ODELJENJE#),....);
U slučaju složenog stranog ključa:
CREATE TABLE naziv_tabele(.......CONSTRAINT naziv_ogranicenja FOREIGN KEY (,
,...)REFERENCES naziv_tabele (,
,...),....);
-
8/18/2019 BP 9 SQL
24/67
24
SQL
Rerefencijalno graničenje (FOREIGN KEY)
Referencijalne akcije:
NO ACTION,
RESTRICT,
CASCADE,
SET NULL,
SET DEFAUL.
CREATE TABLE RADNIK (.......ODELJENJE# INTEGER NOT NULL REFERENCES ODELJENJE
ON DELETE NO ACTION
ON UPDATE NO ACTION,....);
CREATE TABLE RADNIK (.......ODELJENJE# INTEGER NOT NULL REFERENCES ODELJENJE
ON DELETE CASCADE,
....);
-
8/18/2019 BP 9 SQL
25/67
25
SQL
Operacije - upiti
Opšti oblik:
SELECT FROM WHERE ;
SELECT ima funkciju PROJEKCIJE
WHERE služi za definisanje uslova SELEKCIJEodnosno SPAJANJA.
SELECT i FROM su obavezne dok WHERE nije.
-
8/18/2019 BP 9 SQL
26/67
26
SQL
Upiti tipa projekcije
Prikazati šifre, nazive i lokacije svih odeljenja iz relacije o
odeljenjima:
SELECT ODELJENJE#, NAZIV, GRADFROM ODELJENJE;
-
8/18/2019 BP 9 SQL
27/67
27
SQL
Upiti tipa projekcije
Prikazati nazive i šifre svih odeljenja:
SELECT NAZIV, ODELJENJE#FROM ODELJENJE;
-
8/18/2019 BP 9 SQL
28/67
28
SQL
Upiti tipa projekcije
Prikazati sve poslove radnika:
SELECT POSAOSELECT POSAO iliiliFROM RADNIK FROM RADNIK ;;
SELECT DISTINCT POSAOSELECT DISTINCT POSAO
FROM RADNIK FROM RADNIK ;;
-
8/18/2019 BP 9 SQL
29/67
29
SQL
WHERE klauzula
Koristi se sa SELECT, UPDATE i DELETE naredbom.
Osnovni zadatak je da se definiše uslov selekcije.
Ako je podatak nad kojim se primenjuje WHERE klauzula brojnog tipanajčešće korišćeni operatori poređenja su: jednako – “=”, različito –“”, veće – “>”, manje – “=”, manje ili
jednako”
-
8/18/2019 BP 9 SQL
30/67
30
SQL
WHERE klauzula – Primeri:
Prikazati sve podatke o radnicima koji rade u odeljenju 30.
SELECT *FROM RADNIK
WHERE ODELJENJE# = 30;
SQ
-
8/18/2019 BP 9 SQL
31/67
31
SQL
WHERE klauzula – Primeri:
Prikazati sve podatke o radnicima koji ne rade u odeljenju
30.
SELECT *FROM RADNIK
WHERE ODELJENJE# 30;
Prikazati sve podatke o radnicima koji imaju veću premijuod plate
SELECT *FROM RADNIK WHERE PREMIJA > PLATA;
SQL
-
8/18/2019 BP 9 SQL
32/67
32
SQL
WHERE klauzula – Primeri:
Prikazati sve podatke o radnicima koji su zaposleni posle
8.9.1981. god.
SELECT *FROM RADNIK
WHERE DATZAP > ‘1981-09-08’;
Prikazati ime, posao i platu svakog radnika iz odeljenja 20 kojizarađuje više od 20000 din.
SELECT IME, POSAO, PLATA FROM RADNIK
WHERE ODELJENJE# = 20 AND PLATA > 20000;
SQL
-
8/18/2019 BP 9 SQL
33/67
33
SQL
WHERE klauzula – Primeri:
Prikazati sve podatke o rukovodiocima odeljenja i predsedniku.
SELECT *FROM RADNIK
WHERE POSAO = ‘RUKOVODILAC’ OR POSAO =‘PREDSEDNIK’;
SQL
-
8/18/2019 BP 9 SQL
34/67
34
SQL
WHERE klauzula – Primeri:
Prikazati ime, platu, posao i sifru odeljenja za rukovodioce koji ne rade uodeljenju 30.
SELECT IME, PLATA, POSAO, ODELJENJE#FROM RADNIK
WHERE POSAO = ‘RUKOVODILAC’ AND NOT (ODELJENJE# = 30);
ili
WHERE POSAO = ‘RUKOVODILAC’ AND ODELJENJE# 30;
SQL
-
8/18/2019 BP 9 SQL
35/67
35
SQL
WHERE klauzula – Primeri:
Prikazati ime, platu, posao i šifru odeljenja za
rukovodioce i analitičare koji rade u odeljenju 10.
SELECT IME, PLATA, POSAO, ODELJENJE#FROM RADNIK
WHERE (POSAO = ‘RUKOVODILAC’ OR POSAO =‘ANALITICAR’) AND ODELJENJE# = 10;
SQL
-
8/18/2019 BP 9 SQL
36/67
36
SQL
WHERE klauzula – Primeri:
Prikazati ime, posao i platu radnika koji zarađuju između
120000 i 150000.
SELECT IME, POSAO, PLATA FROM RADNIK
WHERE PLATA BETWEEN 120000 AND 150000;
ili
SELECT IME, POSAO, PLATA FROM RADNIK WHERE PLATA >= 120000 AND PLATA
-
8/18/2019 BP 9 SQL
37/67
37
SQL
WHERE klauzula – Primeri:
Prikazati ime, posao i šifru odeljenja radnika koji nisu
analitičari, savetnici niti trgovački putnici.
SELECT IME, POSAO, ODELJENJE#
FROM RADNIK WHERE POSAO NOT IN (‘ANALITICAR’,‘SAVETNIK’, ‘TRG_PUTNIK’);
SQL
-
8/18/2019 BP 9 SQL
38/67
38
SQL
WHERE klauzula – Primeri:
Prikazati ime, posao i šifru odeljenja radnika čija imena počinju sa M.
SELECT IME, POSAO, ODELJENJE#
FROM RADNIK WHERE IME LIKE ‘M%’;
Postoje dva standardna specijalna karaktera:
% - predstavlja niz od 0 ili više karaktera
_ - predstavlja tačnu poziciju karaktera
Primer:
Prikazati ime, posao i šifru odeljenja radnika u čijem imenu treći karakter je R.
SELECT IME, POSAO, ODELJENJE#FROM RADNIK WHERE IME LIKE ‘__R%’;
SQL
-
8/18/2019 BP 9 SQL
39/67
39
SQL
Nula vrednosti – NULL: Mogu se definisati dve vrste nula (NULL) vrednosti:
“još uvek nepoznata vrednost”
“neprimenjivo svojstvo”
SQL podržava samo jednu vrstu nula (NULL) vrednosti i to prvu vrstu.
Provera da li neki podatak ima ili nema nula (NULL) vrednost se vrši
pomoću klauzule IS NULL odnosno IS NOT NULL.
Primer:
Prikazati ime i posao radnika čija je premija nepoznata.
SELECT IME, POSAOFROM RADNIK
WHERE PREMIJA IS NULL;
SQL
-
8/18/2019 BP 9 SQL
40/67
40
SQL
ORDER BY klauzula:
Koristi se za sortiranje rezultujuće tabele po jednom ili višeatributa u opadajućem ili rastućem redosledu:
rastući redosled - ASC
opadajući redosled - DESC
Primer:
Prikazati ime, posao i platu radnika u odeljenju 30 uređene urastućem redosledu poslova i opadajućem redosledu plata.
SELECT IME, POSAO, PLATA FROM RADNIK
WHERE ODELJENJE# = 30ORDER BY POSAO ASC, PLATA DESC;
SQL
-
8/18/2019 BP 9 SQL
41/67
41
SQL
Agregatne funkcije:
Agregatne funkcije se koriste za dobijanje izvedenih, sumarnih informacija.
Primena agregatne funkcije se zasniva na grupisanju redova tabele po određenomkriterijumu. Rezultat je obično novi red u kome se nalazi rešenje primenjene agregatnefunkcije.
Najznačajnije agregatne funkcije su:
AVG(naziv_kolone),
SUM(naziv_kolone),
MIN(naziv_kolone),
MAX(naziv_kolone),
COUNT(*).
AVG i SUM su definisane nad kolonama numeričkog ili intervalnog tipa a ostaleagregatne funkcije nad kolonama bilo kog tipa.
Agregatne funkcije prilikom računanja ne obrađuju nula vrednosti podataka ukolonama.
SQL
-
8/18/2019 BP 9 SQL
42/67
42
SQL
Agregatne funkcije – Primeri:
Naći minimalnu, srednju i maksimalnu platu, kao i broj
radnika u odeljenju 10.
SELECT MIN(PLATA), AVG(PLATA), MAX(PLATA),COUNT(*)FROM RADNIK WHERE ODELJENJE# = 10;
SQL
-
8/18/2019 BP 9 SQL
43/67
43
SQL
Agregatne funkcije – Primeri:
Naći ukupnu platu i ukupnu premiju za trgovačke putnike.
SELECT SUM(PLATA), SUM(PREMIJA),FROM RADNIK WHERE POSAO = ‘TRG_PUTNIK’;
SQL
-
8/18/2019 BP 9 SQL
44/67
44
SQL
Agregatne funkcije – Primeri:
Koliko je srednje godišnje primanje trgovačkih putnika?
SELECT AVG(PLATA + PREMIJA) * 12,FROM RADNIK WHERE POSAO = ‘TRG_PUTNIK’;
SQL
-
8/18/2019 BP 9 SQL
45/67
45
SQL
Agregatne funkcije – GROUP BY klauzula:
Ukoliko grupisanje nije eksplicitno specificirano onda svi redovi kojiispunjavaju kriterijum selekcije definisan u okviru WHERE klauzulečine jednu grupu.
Eksplicitno specificiranje kriterijuma grupisanja se vrši pomoćuklauzule GROUP BY.
Primer:Naći minimalnu, srednju i maksimalnu platu kao i ukupan brojradnika u svakom odeljenju.
SELECT MIN(PLATA), AVG(PLATA), MAX(PLATA),COUNT(*)FROM RADNIK
WHERE ODELJENJE# = 10; (za odeljenje 10)
WHERE ODELJENJE# = 20; (za odeljenje 20) WHERE ODELJENJE# = 30; (za odeljenje 30) itd.
SQL
-
8/18/2019 BP 9 SQL
46/67
46
SQL
Agregatne funkcije – GROUP BY klauzula:
Primer:
Naći minimalnu, srednju i maksimalnu platu kao i ukupanbroj radnika u svakom odeljenju.
SELECT MIN(PLATA), AVG(PLATA), MAX(PLATA),
COUNT(*)FROM RADNIK GROUP BY ODELJENJE#;
SQL
-
8/18/2019 BP 9 SQL
47/67
47
SQ
Agregatne funkcije – GROUP BY klauzula:
Primer:Izračunati broj radnika koji obavljaju isti posao unutar
svakog odeljenja.
SELECT ODELJENJE#, POSAO, COUNT(*)FROM RADNIK GROUP BY ODELJENJE#, POSAO;
SQL
-
8/18/2019 BP 9 SQL
48/67
48
Q
Agregatne funkcije – GROUP BY klauzula:
WHERE i GROUP BY se mogu koristi zajedno pri čemu WHEREuvek ide pre klauzule GROUP BY.
Primer:Odrediti srednju godišnju platu za svako odeljenje. Pri računanjune uzimati u obzir predsednika niti rukovodioce odeljenja.
SELECT AVG(PLATA)*12, ODELJENJE#FROM RADNIK WHERE POSAO NOT IN (‘RUKOVODILAC’,’PREDSEDNIK’)GROUP BY ODELJENJE#;
SQL
-
8/18/2019 BP 9 SQL
49/67
49
Agregatne funkcije – HAVING klauzula:
HAVING klauzulom se definišu kriterijumi za selekciju grupa kojesu prethodno specificirane GROUP BY klauzulom.
Primer:Prikazati koje poslove obavlja više od dva radnika u svakomodeljenju.
SELECT ODELJENJE#, POSAO, COUNT(*)FROM RADNIK GROUP BY ODELJENJE#, POSAOHAVING COUNT(*) > 2;
SQL
-
8/18/2019 BP 9 SQL
50/67
50
Agregatne funkcije – HAVING i WHERE klauzula:
WHERE klauzula definiše kriterijum za selekciju
pojedinačnih redova koji treba da budu uključeni u postupak
grupisanja.
HAVING klauzulom se definišu kriterijumi za selekciju grupa
koje su prethodno specificirane GROUP BY klauzulom.
SQL
-
8/18/2019 BP 9 SQL
51/67
51
Spajanje dve ili više tabela - JOIN
Služi za prikazivanje podataka iz više tabela.
Povezuje n-torke (vrste) različitih tabela koristeći zajedničkeatribute, odnosno atribute definisane nad istim domenima.
Podržani su sledeći tipovi spajanja:
dekartov proizvod,
ekvispajanje,
prirodno spajanje i
spoljno spajanje.
SQL
-
8/18/2019 BP 9 SQL
52/67
52
Dekartov proizvod
Primer: Prikazati imena radnika koji suanalitičari i nazive gradova u kojim senalaze odeljenja.
SELECT IME, GRAD
FROM RADNIK, ODELJENJE WHERE POSAO = ‘ANALITICAR’;
SQL
-
8/18/2019 BP 9 SQL
53/67
53
Ekvispajanje
Primer: Prikazati ime, posao i podatke o odeljenju
u kom radi za svakog radnika.
SELECT IME, POSAO, RADNIK.SODELJENJE,
ODELJENJE.SODELJENJE, NAZIV, GRADFROM RADNIK, ODELJENJE WHERE RADNIK.SODELJENJE = ODELJENJE.SODELJENJE;
Prikaz svih atributa:
SELECT RADNIK.*, ODELJENJE.*FROM RADNIK, ODELJENJE WHERE RADNIK.SODELJENJE = ODELJENJE.SODELJENJE;
SQL
-
8/18/2019 BP 9 SQL
54/67
54
Ekvispajanje – Eksplicitno navođenje
Primer: Prikazati sve podatke o radniku i odeljenju
u kojem on radi.
SELECT *
FROM RADNIK JOIN ODELJENJEON RADNIK.SODELJENJE = ODELJENJE.SODELJENJE;
Odnosno:
SELECT *FROM RADNIK JOIN ODELJENJE USING (SODELJENJE);
SQL
-
8/18/2019 BP 9 SQL
55/67
55
Prirodno spajanje – Eksplicitno navođenje
Primer: Prikazati sve podatke o radniku i odeljenju
u kojem on radi.
SELECT *
FROM RADNIK NATURAL JOIN ODELJENJE;
SQL
-
8/18/2019 BP 9 SQL
56/67
56
Spoljno spajanje
Opšta sintaksa:
{LEFT, RIGHT, FULL} OUTER JOIN
Primer: Prikazati naziv odeljenja, ime i posaosvakog radnika uključujući i odeljenje bez radnika.
SELECT NAZIV, IME, POSAO
FROM ODELJENJE LEFT OUTER JOIN RADNIK ONODELJENJE.SODELJENJE = RADNIK.SODELJENJE;
SQL
-
8/18/2019 BP 9 SQL
57/67
57
Ažuriranje baze podataka:
Podrazumeva:
Dodavanje reda ili redova tabele (naredba INSERT),
Izmenu sadržaja postojećeg reda ili redova tabele(naredba UPDATE),
Brisanje postojećeg reda ili redova tabele (naredba
DELETE).
SQL
-
8/18/2019 BP 9 SQL
58/67
58
Dodavanje novih redova – INSERT
Varijante:
Ubacivanje vrednosti svih atributa n-torke,
Ubacivanje vrednosti nekih atributa n-torke,
Ubacivanje podataka iz jedne tabele u drugu.
SQL
-
8/18/2019 BP 9 SQL
59/67
59
Ubacivanje vrednosti svih atributa n-torke Opšta sintaksa:
INSERT INTO naziv_tabele VALUES (vrednost_art1, vrednost_art2, ...)
Primer:Ubaciti podatke o Bojanu, pravniku, koji počinje da radi u odeljenju 10 od7.04.1984 sa platom od 45000 i bez prava na premiju. Neposrednirukovodilac još nije poznat.
INSERT INTO RADNIK VALUES (3545, ‘Bojan’, ‘Pravnik’, NULL, ‘1984-04-07’,45000, NULL, 10)
Napomena:
Za svaki atribut se mora ubaciti vrednost, pri čemu je NULL dozvoljena opcijaza svaki atribut koji u deklaraciji tabele nije NOT NULL.
SQL
-
8/18/2019 BP 9 SQL
60/67
60
Ubacivanje vrednosti nekih atributa n-torke
Opšta sintaksa:
INSERT INTO naziv_tabele (atr1, atr2,...) VALUES (vrednost_art1, vrednost_art2, ...)
Primer:Uneti podatke o Sr đanu, planeru, koji je primljen u odeljenje 20.
INSERT INTO RADNIK (IME, SRADNIK, ODELJENJE#,POSAO)
VALUES (‘Srđ an’, 3562, 20, ‘Planer’);
SQL
-
8/18/2019 BP 9 SQL
61/67
61
Ubacivanje podataka iz jedne tabele u drugu
Ukoliko obe tabele imaju isti broj atributa i ukoliko su atributiidentično definisani opšta sintaksa je:
INSERT INTO tabela1SELECT * FROM tabela2
inače:
INSERT INTO tabela1 (atr1, atr2,...)SELECT atr, izraz,...FROM tabela2
WHERE kriterijum selekcije
SQL
-
8/18/2019 BP 9 SQL
62/67
62
Ubacivanje podataka iz jedne tabele u drugu
Primer:Dati svim analitičarima i savetnicima premiju u iznosu od
10% plate. Te informacije uneti u tabelu PREMIJA zajednosa datumom zaposlenja.
INSERT INTO PREMIJA (SRADNIK, PREMIJA,POSAO, DATZAP)SELECT SRADNIK, PLATA * 0.1, POSAO, DATZAPFROM RADNIK WHERE POSAO IN (‘ANALITICAR’,’SAVETNIK’)
SQL
-
8/18/2019 BP 9 SQL
63/67
63
Izmena sadržaja – UPDATE
Opšti oblik sintakse:
UPDATE tabelaSET atr1=izraz1, [atr2=izraz2][WHERE kriterijum selekcije n-torki]
Primer1:Novoprimljeni pravnik Bojan imaće predsednika zaneposrednog rukovodioca.
UPDATE RADNIK
SET SRUKOV = 3539 WHERE IME = ‘Bojan’;
SQL
-
8/18/2019 BP 9 SQL
64/67
64
Izmena sadržaja – UPDATE
Primer2:Sr đan počinje da radi 19.9.84. god. Sa platom od 35000 i ima neposrednogrukovodioca sa šifrom 3266.
UPDATE RADNIK SET SRUKOV = 3366,
DATZAP = ‘1984-09-19’,PLATA = 35000,
WHERE IME = ‘Srđ an’;
Primer3:
Dati svim analitičarima i savetnicima u odeljenju 20 povišicu na platu od 15% .
UPDATE RADNIK SET PLATA = PLATA * 1.15 WHERE POSAO IN (‘ANALITICAR’, ‘SAVETNIK’) AND ODELJENJE# = 20;
SQL
-
8/18/2019 BP 9 SQL
65/67
65
Brisanje n-torki tabele – DELETE
Opšti oblik sintakse:
DELETE [FROM] tabela[WHERE kriterijum selekcije n-torki]
Primer1:
Izbaciti podatke o Bojanu, jer je on napustio radnuorganizaciju.
DELETE FROM RADNIK WHERE IME = ‘Bojan’;
SQL
-
8/18/2019 BP 9 SQL
66/67
66
Brisanje n-torki tabele – DELETE
Primer1:
Izbaciti podatke o svim radnicima odeljenjapriprema.
DELETE FROM RADNIK WHERE ODELJENJE# IN(SELECT ODELJENJE#FROM ODELJENJE
WHERE NAZIV = ‘PRIPREMA’);
-
8/18/2019 BP 9 SQL
67/67
67
BAZE PODATAKA
Dr Vladimir Ranković, docent