You are on page 1of 7

SQL Osnovni skup operacija relacione algebre: Selekcija (SELECT) Projekcija (PROJECT) Unija (UNION) Razlika (DIFFERENCE, MINUS,

NUS, EXCEPT) Dekartov proizvod (CARTESIAN PRODUCT, CROSS PRODUCT, CROSS JOIN) Presek (INTERSECTION) Deljenje (DIVISION) Spoj (JOIN) Unutranji (INNER) Spoljanji (OUTER) Levi (LEFT) Desni (RIGHT) Potpuni (FULL) Polu spoj (SEMI JOIN) Imena tabela, pogleda, atributa i drugih objekata baze podataka moraju da potuju sledea pravila: 1. Maksimalna duina imena je 30 znakova. 2. Ime ne sme da sadri znak pitanja (?) 3. Nema razlike izmeu malih i velikih slova 4. Prvi znak mora biti slovo 5. Dozvoljeni znaci su A-Z, 0-9, _, $ i #. 6. Kao imena se ne smeju koristiti rezervisane rei. 7. Imena se ne smeju ponavljati. Znakovni tipovi podataka CHAR VARCHAR, VARCHAR2 NCHAR, NVARCHAR Numeriki tipovi podataka NUMBER, INTEGER, SMALL INT, INT FLOAT, REAL. DOUBLE PRECISION Tipovi podataka za predstavljanje datuma DATE TIMESTAMP Tipovi podataka za predstavljanje velikih objekata (LOB) BLOB CLOB, NCLOB BFILE INTEGER, INT, SMALL INT Za celobrojne podatke FLOAT, REAL, BINARY_FLOAT, BINARY_REAL Za razlomljene podatke sa pokretnim zarezom LOB tipovi podataka Za pamenje velikih blokova nestruktuiranih podataka BLOB se koristi za pamenje binarnih podataka CLOB i NCLOB s ekoriste za pamenje znakovnih podataka BFILE omoguava pamenje podataka van baze podataka u file sistemu Maksimalna veliina je 128TB DATE, TIMESTAMP Standardni format za datume je DD-MMM-YYYY (Primer: '13-NOV-92) Standardni format za pamenje vremena je HH:MI:SS. (Primer: '13-NOV-92 11:12:32' Ukoliko se navede samo datum podrazumevani podatak za vreme je 00:00:00 odnosno pono. Ukoliko se navede samo vreme podrazumevani datum je prvi dan tekueg meseca. TIMESTAMP moe da ukljuuje i delove sekundi i informaciju o vremenskoj zoni. Kod navoenja PRIMARY KEY podrazumevaju se UNIQUE i NOT NULL ogranienje za tu kolonu, tako da se ne moraju posebno navoditi.

Sintaksa: 1. Kreiranje tabele

a) CREATE TABLE <ime_tabele> ( <lista_deklaracija_kolona> [,<lista_deklaracija_organienja_tabele>] ); b) CREATE TABLE < ime_tabele > ( <atributi i njihovi tipovi podataka>, PRIMARY KEY (a,b,c) ); c) CREATE TABLE RADI_NA ( MBR INTEGER NOT NULL, BRPR INTEGER NOT NULL, SATI NUMBER(2,0), CONSTRAINT RADI_NA_PK PRIMARY KEY (MBR, BRPR) ); d) CREATE TABLE RADI_NA ( MBR INTEGER NOT NULL, BRPR INTEGER NOT NULL, SATI NUMBER(2,0), PRIMARY KEY (MBR, BRPR) ); e) CREATE TABLE RADI_NA ( MBR INTEGER NOT NULL, BRPR INTEGER NOT NULL, SATI NUMBER(2,0), CONSTRAINT RADI_NA_PK PRIMARY KEY (MBR, BRPR), CONSTRAINT RADNIK_FK FOREIGN KEY (MBR) REFERENCES RADNIK(MATBR), CONSTRAINT PROJEKAT_FK FOREIGN KEY (BRPR) REFERENCES PROJEKAT(BROJ) ON DELETE CASCADE );

2. Deklarisanje kolone: <ime_kolone> <tip_podatka>[(<duina>)] [<ogranienje_kolone>], 3. Kreiranje sa primarnim i stranim kljuem CREATE TABLE <imeTabele> ( A <tip_podatka> PRIMARY KEY, B <tip_podatka> REFERENCES <ime_ref_tabele>(<ime_ref_kolone>), ostali atributi ); Atribit iza koga stoji klauzula REFERENCES definisan je kao spoljni klju u odnosu na primarni klju tabele ije je ime navedeno iza klauzule REFERENCES. 4. Menjanje definicije tabele ALTER TABLE <ime tabele> ADD <definicija atributa> | ADD <definicija ogranienja> | DROP <ime atributa> | DROP CONSTRAINT <ime ogranienja> | MODIFY < definicija atributa > | DROP PRIMARY KEY DROP UNIQUE <ime atributa> 5. Brisanje DROP TABLE <ime_tabele> [CASCADE CONSTRAINTS] [PURGE] CASCADE CONSTRAINTS brisanjem tabele automatski brie i sva ogranienja koja referenciraju tabelu koja se brie. Pri:

DROP TABLE RADNIK; DROP TABLE PROJEKAT CASCADE CONSTRAINTS 6.

1. CREATE TABLE PREDMET ( KatId CHAR(6), PrKod CHAR(4), PrNaziv CHAR(20), Opis CHAR(100), PRIMARY KEY (PrKod), - primarni kljuc UNIQUE (KatId,PrNaziv) ) - kljucevi kandidati 2. CREATE TABLE STUDENT ( Ind INTEGER PRIMARY KEY, Ime CHAR(20) NOT NULL, Adresa CHAR(50), Status CHAR(10) DEFAULT Bruco' ) 3. CREATE TABLE ZAPISNIK ( StudId INTEGER, PrKod CHAR(6), Rok CHAR(6), Ocena INTEGER NOT NULL, PRIMARY KEY (StudId,PrKod,Rok), CHECK (Ocena IN ( 5,6,7,8,9,10) AND VALUE IS NOT NULL), CHECK (StudId >0 AND StudId <7000) ) 4. CREATE DOMAIN OCENA INTEGER CHECK (VALUE IN (5,6,7,8,9,10) AND VALUE IS NOT NULL ) CREATE DOMAIN OCENA INTEGER CHECK (Ocena >4 AND Ocena <11 AND VALUE IS NOT NULL) CREATE TABLE ZAPISNIK ( StudId INTEGER, PrKod CHAR(6), Rok CHAR(6), Ocena OCENA, PRIMARY KEY (StudId,PrKod,Rok), CHECK (StudId >0 AND StudId <7000) ) 5. INSERT INTO STUDENT(Ind, Ime, Adresa,Status) VALUES (11708, Ana, Niavska 11 Pirot,apsolvent) Mogu se izostaviti imena atributa (kolona) u klauzuli INTO, ali se vrednosti atributa moraju navesti u redosledu koji je defiisan emom relacije Dobar stil je da se imena atributa eksplicitno navedu DELETE FROM STUDENT S WHERE S.ime= Ana Iz tabele STUDENT brie torku koja u koloni Ime ima vrednost Ana UPDATE STUDENT S SET S.Status= poslediplomac WHERE S.ind= 11708 U tabeli STUDENT aurira torku koja u koloni Ind ima vrednost 11708 tako to postavlja novu vrednost poslediplomac u koloni Status -------------------------------------------------------Naredba S E L E C T

Klauzule: SELECT definie listu kolona koja e biti ukljuena u rezultujuu tabelu. FROM definie tabele iz kojih se pribavljaju podaci za potrebe generisanja rezultujue tabele. Moe da ukljui jednu ili vie JOIN klauzula z apovezivanje tabela na osnovu kriterijuma zadatih od strane korisnika. WHERE definie predikat na osnovu koga se ograniava broj vrsta u rezultujuoj tabeli. Ova klauzula iz rezultata eliminie sve vrste za koje specificirani predikat ne vraa vrednost TRUE. CONNECT BY i START WITH transformie stablo u strukturu tipa stabla GROUP BY grupie vrste u rezultujuoj tabeli koje u specificiranim kolonama imaju istu vrednost. HAVING definie predikat na osnovu koga se eliminiu vrste nakon to je klauzula GROUP BY primenjena na rezultujuu tabelu. ORDER BY koristi se za sortiranje rezultujue tabele. Korisnici definiu kolone po kojima se vri sortiranje kao i smer sortiranja. UNION, INTERSECT, MINUS primenjuju se na rezultujuim tabelama veeg broja SQL naredbi. Posle SELECT moe: ALL u rezultujuoj tabeli prikazuju se sve vrste koje zadovoljavaju navedeni predikat DISTINCT iz rezultujue tabele izbacuju se duplikati vrsta * - rezultujua tabela ukljuuje sve kolone tabele ili tabela iz kojih se pribavljaju podaci tabela.* - rezultujua tabela ukljuuje sve kolone specificirane tabele izraz - ime kolone ili funkcije nad kolonama koja e biti ukljuena u rezultujuu tabelu AS pseudonim - novo ime kolone ili funkcije nad kolonama koje im se dodeljuje u rezultujuoj tabeli primer: SELECT * FROM RADNIK; == SELECT sve kolone FROM RADNIK; SELECT ALL MATBRS FROM RADNIK; == SELECT MATBRS FROM RADNIK; (ALL se sporazumeva) a predhodno samo bez duplih: SELECT DISTINCT MATBRS FROM RADNIK; u WHERE moe da bude: 1.Relacioni operatori 2.Logiki operatori 3.Operator BETWEEN 4.Operator IN 5.Operator LIKE 6.Operator IS NULL ------------------------------------------------------1. Relacioni: 1.= Jednako 2.<> Nije jednako(razliito) 3.< Manje od 4.> Vee od 5.<= Manje ili jednako a 6.>= Vee ili jednako ...WHERE PREZIME = 'Petrovi'; ... WHERE PLATA >= 40000; -----------------------------------------------------2. Logiko operatori: Prioritet logikih operatora je sledei: 1.NOT 2.AND 3.OR ...WHERE NOT A = B, ...WHERE PREZIME = 'Petrovi' AND PLATA >= 40000; ...WHERE PREZIME = 'Petrovi' AND NOT PLATA >= 40000; ...WHERE PREZIME = 'Petrovi' OR PREZIME = 'Jovanovi'; == ...WHERE PREZIME IN ('Petrovi', 'Jovanovi'); != WHERE PREZIME NOT IN ('Petrovi', 'Jovanovi'); ...WHERE PLATA BETWEEN 30000 AND 40000; - ukljuujui i granice opsega ...WHERE MATBRS IS NULL; - ima NULL vrednost u koloni MATBRS Ne moe: WHERE MATBRS = NULL; WHERE NOT MATBRS IS NULL; WHERE MATBRS IS NOT NULL; WHERE PREZIME LIKE 'J%'; - % sve menja, ak i nita WHERE DATRODJ LIKE '%SEP%'; WHERE DATRODJ LIKE '___SEP___'; - crtica zamenjuje jedan znak koji mora da postoji ili ti kontra: WHERE DATRODJ NOT LIKE '___SEP___'; WHERE PREZIME LIKE 'Pe%\_%' ESCAPE '\'; ORDER BY

...ORDER BY PREZIME ASC/DSC; - s tim sto je ASC sporazumevano pa ne mora se pie ...ORDER BY BRSEK DESC, PREZIME ASC; ---------------------------------------------------3. Aritmetiki operatori +, -, *, / ROUND(broj[,d]) - zaokruivanje na d decimala POWER(broj,e) - e-ti stepen zadatog broja TRUNC(broj[,d]) - odsecanje na d decimala ABS(broj) - apsolutna vrednost broja SIGN(broj) - znak broja MOD(broj1, broj2) - broj1 mod broj2 SQRT(broj) - kvadratni koren broja LEAST(izraz, ...) - najmanji navedeni izraz GREATEST(izraz, ...) - najvei navedeni izraz primer: 1. SELECT LIME, PREZIME, PLATA + 5000 AS PLATA_SA_BONUSOM FROM RADNIK; 2. SELECT LIME, PREZIME, PLATA + 5000 AS PLATA_SA_BONUSOM FROM RADNIK WHERE PLATA + 5000 > 40000; 3. SELECT LIME IME, PREZIME, ROUND(PLATA/(22*8), 2) ZARADA_SAT FROM RADNIK; zaradu po satu svih radnika, zaokruenu na dve decimale Funkcije za rad sa tekstualnim podacima: string1 ll string2 - konkatenacija stringova LENGTH(string) - duina stringa SUBSTR(s, i, j) - podniz od s duine j od pozicije i INSTR(s1, s2[,k]) - trai s2 u s1 od pozicije k UPPER(s) - prevodi s u velika slova LOWER(s) - prevodi s u mala slova TO_NUM(s) - prevodi s u numeriki tip TO_CHAR(n) - prevodi numeriki u znakovni tip LPAD(s, l[,c]) - popunjava s sa leve strane sa l znakova c RPAD(s, l[,c]) - popunjava s sa desne strane sa l znakova c NVL(s1, s2) - ako vai s1 IS NULL, vraa s2; u suprotnom vraa s1. 1. NVL primer SELECT LIME, PREZIME, NVL(TO_CHAR(MATBRS), 'NEMA EFA') SEF FROM RADNIK; 2. Konkatenacija SELECT LIME || ' ' || SSLOVO || '.' || ' ' || PREZIME AS PUNO_IME FROM RADNIK; Funkcije agregacije AVG(kolona) - izraunava srednju vrednost datog atributa SUM(kolona) - izraunava sumu svih vrednosti atributa MIN(kolona) - nalazi minimalnu vrednost atributa MAX(kolona) - nalazi najveu vrednost atributa COUNT(*) - nalazi broj vrsta u tabeli (grupi) COUNT(kolona) - nalazi broj broj vrsta sa ne NULL vrednostima kolone COUNT (DISTINCT kolona) - nalazi broj vrsta sa razliitim vrednostima zadate kolone 1. Broj vrsta u rez tabeli SELECT COUNT(*) AS UKUPNO_RADNIKA FROM RADNIK; izlaz je samo broj 2.

SELECT MAX(PLATA) AS MAX_PLATA, MIN(PLATA) AS MIN_PLATA, AVG(PLATA), SUM(PLATA) FROM RADNIK; izlaz je 4 broja Funkcije agregacije nije mogue koristiti u WHERE klauzuli. NEEEEEEEE: SELECT LIME, PREZIME, PLATA FROM RADNIK WHERE Plata > AVG(Plata). SQL standard definie sledee tipove spoja: -Cross join predstavlja Dekartov proizvod vrsta iz tabela koje se spajaju. Dekartov proizvod dve tabele (A CROSS JOIN B) se dobija tako to se svaka vrsta iz jedne tabele kombinuje sa svakom vrstom iz druge tabele. Ne koristi se esto ali predstavlja osnovu za definisanje ostalih tipova spoja. Ukoliko se u FROM klauzuli navede vei broj tabela a ne navede se tip i uslov spoja podrazumeva se cross join. inner join - A INNER JOIN B) uzimaju se sve vrste iz tabele A i pronalazi im se odgovarajua vrsta u tabeli B. Ukoliko vrsta iz tabele A nema odgovarajuu vrstu u tabeli B ne ukljuuje se u rezultat. Ukoliko vrsti iz tabele A odgovara vie vrsta tabele B ona se u rezultatu ponavlja vie puta (po jednom za svaku odgovarajuu vrstu u tabeli B). outer join left outer join - A LEFT OUTER JOIN B) pored vrsta koje ukljuuje unutranji spoj ukljuuje i vrste iz tabele A (leve tabele) koje nemaju odgovarajuu vrstu u tabeli B (desnoj tabeli). right outer join - A RIGHT OUTER JOIN B pored vrsta koje ukljuuje unutranji spoj u rezultat ukljuuje vrste iz tabele B (desne tabele) koje nemaju odgovarajuu vrstu u tabeli A (levoj tabeli). full outer join GROUP BY I AGREGACIJE Prilikom korienja klauzule GROUP BY, sve kolone koje su navedene u klauzuli SELECT a na koje nije primenjena neka funkcija agregacije, MORAJU BITI NAVEDENE U GROUP BY KLAUZULI. U suprotnom SQL upit nee moi da se izvri. INSERT Ukoliko je lista kolona izostavljena, u listi vrednosti kolona moraju se navesti vrednosti za svaku kolonu koja postoji u tabeli u koju se dodaje nova vrsta. U tom sluaju lista vrednosti kolona mora da odgovara redosledu kojim su kolone navedene prilikom kreiranja tabele (u CREATE TABLE naredbi). Takoe, vrednosti kolona, moraju biti kompatibilne po tipu sa tipovima podataka koji su za kolone navedeni prilikom kreiranja tabele. Prilikom dodavanja nove vrste u tabelu bie proverena sva ogranienja koja su definisana nad tabelom: tip podataka, duina polja, primarni klju, NOT NULL, CHECK... Ukoliko bar jedno ogranienje nije zadovoljeno DBMS e prijaviti poruku o greci i nee izvriti naredbu. Lista kolona u pojedinim sluajevima ne mora biti kompletna. Iz liste se mogu izostaviti kolone kod kojih nije definisano NOT NULL ogranienje i kolone koje imaju definisano DEFAULT ogranienje. 1. DODAVANJE INSERT INTO PROJEKAT VALUES ('ProizvodA', 'Prokuplje', 100, 5); INSERT INTO PROJEKAT (NAZIV, BROJPR, BRS, LOKPR) VALUES ('ProizvodB', 101, 4, 'Svrljig'); 2. DODAVANJE PREKO UPITA CREATE TABLE PROJEKAT_NEW ( BROJ NUMBER(3), NAZIV VARCHAR(25) NOT NULL, LOKACIJA VARCHAR(15) ); INSERT INTO PROJEKAT_NEW (BROJ, NAZIV, LOKACIJA) SELECT BROJPR, NAZIV, LOKPR FROM PROJEKAT; 3. KREIRANJE NOVE TABELE NA OSNOVU UPITA CREATE TABLE SEK_INFO AS SELECT NAZIV, COUNT(*), AVG(PLATA) FROM SEKTOR, RADNIK WHERE BRSEK = SBROJ GROUP BY NAZIV; MODIFIKACIJA PODATAKA - UPDATE

SET definie u kojoj se koloni menja vrednost definisana zadatim izrazom. Izraz moe bti konstantna vrednost, vrednost nekog izraza ili vrednost koju vraa ugnjedeni SQL upit. 1.svi projekti koji u nazivu sadre re Proizvod se premetaju u Ni u nadlenost sektora broj 4. UPDATE PROJEKAT SET LOKPR = 'Beograd' WHERE BROJPR = 101; 2.U nastavku je dat SQL upit kojim se projekat broj tri prbacuje u Beograd u nalenost sektora broj 5. UPDATE PROJEKAT SET LOKPR = 'Ni', BRS = 4 WHERE NAZIV LIKE '%Proizvod%'; 3. Projekti za koje je zaduen sektor broj 4 prelaze u nadlenost sektora Razvoj. UPDATE PROJEKAT SET BRS = (SELECT SBROJ FROM SEKTOR WHERE NAZIV ='Razvoj') WHERE BRS = 4; BRISANJE - DELETE Ako se ne navede WHERE klauzula, naredba delete brie sve vrste iz tabele ije se ime navede u from klauzuli. 1. iz tabele PROJEKAT brie podatke o svim projektima iji se naziv zavrava slovom A'. DELETE FROM PROJEKAT WHERE NAZIV LIKE '%A'; 2. brie podatke o svim projektima. DELETE FROM PROJEKAT; 3. brie podatke o svim projektima za koej je zaduen sektor broj 1. DELETE FROM PROJEKAT WHERE BRS = 1; 4. brie podatke o svim projektima koji su locirani u Beogradu ili Novom Sadu i za njih je zaduen sektor Administracija. DELETE FROM PROJEKAT WHERE LOKPR IN ('Beograd', 'Novi Sad') AND BRS = (SELECT SBROJ FROM SEKTOR WHERE NAZIV = 'Administracija'); 5. brie podatke o svim projektima na kojima nije angaovan nijedan radnik. DELETE FROM PROJEKAT WHERE BROJPR NOT IN (SELECT BRPR FROM RADI_NA); ILI DELETE FROM PROJEKAT WHERE NOT EXISTS (SELECT 0 FROM RADI_NA WHERE RADI_NA.BRPR = PROJEKAT.BROJPR);

You might also like