Upload
rosalyn-morrow
View
45
Download
3
Embed Size (px)
DESCRIPTION
Osnove SQL. Prof. dr MILORAD K. BANJANIN Univerzitet u Istočnom Sarajevu Tehnološki fakultet Zvornik. IME ENTITETA (PREZIME, PLATA VREDNOST ENTITETA ( BANJANIN , 1000). ATRIBUT IDENTI Č AN SA SVOJIM DOMENOM. SKUP SVIH MOGU Ć IH VREDNOSTI (INSTANCI) ODRE Đ ENOG ATRIBUTA - PowerPoint PPT Presentation
Citation preview
Osnove SQL
Prof. dr MILORAD K. BANJANIN
Univerzitet u Istočnom SarajevuUniverzitet u Istočnom Sarajevu
Tehnološki fakultet ZvornikTehnološki fakultet Zvornik
ATRIBUT
IDENTIČAN SA
SVOJIM
DOMENOM
SKUP SVIH MOGUĆIH VREDNOSTI
(INSTANCI) ODREĐENOG ATRIBUTA
VREDNOST U DOMENU SE JEDNOM JAVLJA
SVE VREDNOSTI
ODREĐENOG SVOJSTVA
(npr., MESTO) ČINE
GRUPU POD JEDNIM
IMENOM (npr., PANCEVO,
BEOGRAD)
IME ENTITETA
(PREZIME, PLATA
VREDNOST ENTITETA
(BANJANIN, 1000)
PREDSTAVLJANJE
REALNOG SVETA
DISKRETNIM
VREDNOSTIMA
ENTITET
OBJEKAT OBJEKAT POSMATRANJAPOSMATRANJA
OPISIVANJE REALNOG SVETA
PODACI PREDSTAVLJAJU VREDNOSTI POJEDINIH ATRIBUTA KOJI SE UNOSE U MEMORIJU
BAZA PODATAKA
zbirka uzajamno povezanih podataka, koji su memorisani sa kontrolisanom redundansom, da bi
optimalno služili različitim aplikacijama
podaci su memorisani nezavisno od programa koji ih koriste
za dodavanje novih podataka i modifikovanje ili pretraživanje postojećih podataka koriste se zajednicki i kontrolisani pristupi
DDL
STRUKTURA
DML
SISTEM ZA UPRAVLJANJE BAZAMA PODATAKA (SUBP)
memorisanje i odrzavanje podataka Logička (logički pogled na bazu podataka - model
podataka i model procesa)
manipulisanje podacima
Fizička (interni pogled na podatke)
Data Definition Language
Data Manipulation Language
RELACIONA BAZA PODATAKA
odnosi između podataka su u obliku dvodimenzionih tabela
K O L O N E sadrže samo vrednosti jednog domena
R E D O V I se razlikuju između sebe
K LJ U Č R E L A C I J E predstavlja atribut koji jednoznačno identifikuje red
KRITERIJUMI ZA OCENU RELACIONIH SUBP-a
Struktura baze podataka se na logičkom nivou predstavlja samo tabelama
11
Svaki podatak u relacionoj bazi podataka dostupan je preko kombinacije imena tabele (relacije), vrednosti primarnog ključa i
imena kolne (atributa)
22
Specifičan indikator (razlicit od "praznog" niza karaktera, nule ili bilo kog broja) koristi se za predstavljanje nula vrednosti, bez
obzira na tip podatka
33
Sistem poseduje katalog (rečnik) podataka koji se logički predstavlja na isti način kao i sama baza podataka - korisnik može da koristi isti jezik da bi pristupio tim meta podacima
44
Bez obzira koliko jezika i načina korišćenja sistem podržava, mora posedovati barem jedan jezik čije se naredbe mogu
izraziti kao niz karaktera sa dobro definisanom sintaksom i koji podržava:
55
(1) definiciju podataka(2) definiciju pogleda(3) manipulaciju podatka, interaktivno i kroz programe(4) definiciju pravila integriteta(5) autorizaciju (sigurnost)(6) granice transakcija (BEGIN, COMMIT, ROLLBACK)
Sistem poseduje efikasan algoritam pomoću koga može da odredi, za svaki definisani pogled, u trenutku njegovog
definisanja, da li se i koje operacije održavanja mogu primeniti na taj pogled – čiji rezultat se smešta u katalog baze podataka
66
Nad baznim relacijama i nad pogledima mogu se izvršavati ne samo operacije pretraživanja, već i operacije održavanja baze
podataka
77
Aplikacioni program i interaktivna komunikacija ostaju neizmenjeni kada se promeni fizička organizacija baze ili fizički
metod pristupa
88
Aplikacioni program i interaktivna komunikacija ostaju nepromenjene kada se bilo koje promene, koje ne menjaju
odgovarajući sadržaj tabele, unesu u baznu tabelu
99
Pravila integriteta se definišu u okviru definicije baze podataka i čuvaju se u katalogu - ne implementiraju se kroz aplikacione
programe
1010
Sve navedene karakteristike su nezavisne od distribucije baze podataka
1111
Ako relacioni sistem poseduje ili može da radi sa nekim jezikom treće generacije u kome se obrađuje jedna n-torka u jednom trenutku vremena, kroz taj jezik se ne mogu zaobići
pravila integriteta zadana preko samog relacionogjezika
1212
Structured Query Language - standardni relacioni upitni jezik
Sastoji se iz: DDL (Data Definition Language) i DML (Data Manipulation
Language) naredbi
jezik za direktan intereaktivni pristup bazi podataka
DDL naredbe
CREATE
ALTERDROP
Mogu se kreirati/promeniti/obrisatitabeleindeksipogledi
Postoje i drugi objekti, ali su specifični za svakog proizvođača (sekvence, tablespace-ovi, itd.)
TIPOVI PODATAKA
INTEGER, NUMBER(dužina,dec), NUMERIC, DECIMAL
brojevi (celobrojni, razlomci)
nisu floating point!
FLOAT, DOUBLE
floating point brojevi
CHAR(dužina), VARCHAR(dužina)
stringovi fiksne i varijabilne dužine
dužina nije impozantna!
DATE, TIME, TIMESTAMP
datum, vreme i datum sa vremenom
BOOLEAN, BIT
boolean tip podatka
BLOB, CLOB, TEXT
Binary Large OBject, za smeštanje binarnih objekata (slika, filmova, itd.)TEXT se koristi za smeštanje velike količine teksta
PRIMER
CREATE TABLE PROFESORI(PROFESOR_ID INTEGER not null,IME VARCHAR(25) not null,PREZIME VARCHAR(35) not null,ZVANJE VARCHAR(15) not null)
Izmena tabele (definicije) - Opšta sintaksa
ALTER TABLE ime_tabeleADD|MODIFY|DROP parametri
Kreiranje tabele - Opšta sintaksa
CREATE TABLE ime_tabele(obl1 tip_podatka [NULL | NOT NULL][, obl2 tip_podatka [NULL | NOT
NULL]...])
KREIRANJE/IZMENA/BRISANJE TABELA
Menja tip, dužinu,
NULL/NOT NULL
PRIMER
ALTER TABLE PROFESORIADD (Plata NUMBER(5,2))
Dodavanje novih kolona (ADD) - Opšta sintaksa
ALTER TABLE ime tabeleADD (obl1 tip_podatka [NULL | NOT NULL] [, obl2 tip_podatka [NULL | NOT NULL)]...])
Izmena tabele (MODIFY) - Opšta sintaksa
Potencijalno ogromni
problemi zbog konverzije
tipova - nekad i nemoguće
(zbog primarnih ključeva, spoljnih
ključeva, itd.)
ALTER TABLE ime_tableleMODIFY (obl1 tip_podatka [NULL | NOT NULL] [, obl2 tip_podatka [NULL | NOT NULL)]...])
PRIMER
ALTER TABLE PROFESORIMODIFY (Plata NUMBER(7,2))
Izbacuje kolonu - Ponekad nemoguće (zbog primarnih ključeva, stranih ključeva, itd.)
Izmena tabele (DROP) - Opšta sintaksa
ALTER TABLE ime_tabeleDROP [COLUMN] ime_kolone
PRIMER
ALTER TABLE PROFESORIDROP Plata
Uklanjanje tabela - Opšta sintaksa
DROP TABLE ime_tabele
PRIMER
DROP TABLE PROFESORI
Kreira indeks nad
kolonom/kolonama
KREIRANJE/PROMENA/BRISANJE INDEKSA
PRIMER
CREATE UNIQUE INDEX PROFESORI_KEYON PROFESORI (PROFESOR_ID)
Kreiranje indeksa - Opšta sintaksa
CREATE [UNIQUE] INDEX ime_indeksaON ime_tabele (obl1 [ASC|DESC]
[, obl2 [ASC|DESC]...])
PRIMER
DROP INDEX PROFESORI_KEY
Uklanjanje indeksa - Opšta sintaksa
DROP INDEX ime_indeksa
DML naredbe
INSERT
SELECT
UPDATE
DELETE
Ubacuju se ili kompletne kolone ili
samo one koje moraju da budu
unete (NOT NULL)
PRIMER
INSERT INTO PROFESORIVALUES (1, ‘Petar’, ‘Petrović’, ‘Docent’)
Ubacivanje novih podataka u tabelu (INSERT)
INSERT INTO ime_tabele (obl1 [, obl2, ...])VALUES (vred1 [, vred2 ...])
Opšta sintaksa 1
INSERT INTO ime_tabele VALUES (vred1 [, vred2 ...])
Opšta sintaksa 2
Pretraživanje baze podataka (SELECT)
SELECT {* | obl [, obl2 ...]}FROM ime_tabele
Opšti oblik (obavezni elementi)
SELECT [ALL|DISTINCT] {* | obl [alias] [, obl2 [alias2] ...]}
FROM tabela [alias] [, tabela2 [alias2]...][WHERE uslov ][ORDER BY obl [ASC|DESC] [, obl2 [ASC|DESC]...]][GROUP BY obl [, obl2...] [HAVING uslov]]
Opšti (prošireni) oblik
Ako se ne navede, podrazumeva se ALL,
tj. svi redovi, bez obzira na duplikate
PRIMER
SELECT DISTINCT ZVANJE FROM PROFESORI
Prikazati sva zvanja u tabeli PROFESORI (bez duplikata)
Selekcija željenih slogova – WHERE klauzula
= jednako!= nije jednako> >= <= veće, veče ili jednako,...NOT IN nije unutar listeIN unutar liste[NOT] BETWEEN x AND y [nije] između x i yEXISTS ako postoji barem jedan slog[NOT] LIKE [nije] poput zadatog stringaIS [NOT] NULL [nije] NULLNOT negacijaAND logičko IOR logičko ILI
Unutar uslova se mogu koristiti sledeći operatori
Zadaje se uslov iza WHERE klauzule
PRIMER
SELECT * FROM PROFESORI WHERE PLATA BETWEEN 2000 AND 3000
Svi profesori čija plata je između 2000 i 3000 KM
Funkcije
AVG(obl) srednja vrednostSUM(obl) suma svih obeležjaMIN(obl) minimalna vrednostMAX(obl) maksimalna vrednostCOUNT({*|[DISTINCT]obl}) broj pojavljivanjaABS(broj) apsolutna vrednostMOD(br1, br2) br1 po modulu br2POWER(br, e) br na e-ti stepenLENGTH(str) dužina stringaUPPER(str) u velika slovaSUBSTRing(str, pos [, d]) podstring od str, sa
poz. posCONCAT(str1, str2, str3, ...) konkatenacija
stringovaYEAR(obl) vraća godinu iz datuma
Postoji veliki broj funkcija koje operišu nad podacima unutar izraza
PRIMER
SELECT SUM(PLATA) FROM PROFESORI WHERE ZVANJE=‘Docent’
Naći sumu svih plata za docente
Izmena podataka (UPDATE)
UPDATE ime_tabeleSET obl1=vred1 [,obl2=vred2...][WHERE uslov]
Opšta sintaksa
Omogućuje izmenu podataka u tabeli
Bez WHERE klauzule menjaju se podaci u celoj tabeli, a
upotrebom WHERE klauzule se precizira koji slog se želi
izmeniti
PRIMER
UPDATE PROFESORISET ZVANJE=‘Docent’WHERE PROFESOR_ID=1
Brisanje slogova (DELETE)
DELETE FROM ime_tabele[WHERE uslov]
Opšta sintaksa
Briše slogove u tabeli
Bez WHERE klauzule se brišu podaci u celoj tabeli, a
upotrebom WHERE klauzule se precizira koji slog se želi
brisati
PRIMER
DELETE FROM PROFESORIWHERE PROFESOR_ID=1
Primarni ključ (PRIMARY KEY)Definiše se prilikom definisanja tabele
CONSTRAINT ime_ograničenja PRIMARY KEY (obl1 [, obl2, ...])
Opšta sintaksa
PRIMER
CREATE TABLE RADNA_MESTA (RADNO_MESTO_ID INTEGER NOT NULL,NAZIV VARCHAR(20),CONSTRAINT PK_RADNO_MESTO PRIMARY KEY (RADNO_MESTO_ID))
Veze
Referencijalni integritet garantuje da će podaci u tabelama koje su povezane imati smisla
PRIMER
Radnik Radno mesto
ako se ne definiše referencijalni integritet postoji problem kod: dodavanja, brisanja i izmene
Strani ključ (FOREIGN KEY)
Definiše se prilikom kreiranja tabele
CONSTRAINT ime_ograničenja FOREIGN KEY (obl1)REFERENCES tabela_na_koju_se_referencira (obl_iz_strane_tabele)
[ON UPDATE akcija] [ON DELETE akcija]
Opšta sintaksa
PRIMER
CREATE TABLE RADNICI (RADNIK_ID INTEGER NOT NULL,IME VARCHAR(20),RADNO_MESTO_ID INTEGER,CONSTRAINT PK_RADNIK PRIMARY KEY (RADNIK_ID),CONSTRAINT FK_RADNIK_RADNO_MESTO FOREIGN KEY (RADNO_MESTO_ID)
REFERENCES RADNA_MESTA (RADNO_MESTO_ID))
Upiti nad više tabela
Tabele se mogu “kombinovati” spajanjem, koje se vrši navođenjem u FROM klauzuli
Ako se ne precizira, radi se Dekartov proizvod tabela (“svaki sa svakim”)
PRIMER
SELECT * FROM RADNICI, RADNA_MESTA
Spajanje se vrši po paru (spoljni ključ prve tabele, primarni ključ druge tabele)
PRIMER
izlistati imena svih profesora i nazive predmeta koje predaju
SELECT A.IME, A.PREZIME, B.NAZIV FROM PROFESORI A, PREDMETI B, PREDAJE C
WHERE A.PROFESOR_ID=C.PROFESOR_ID AND B.PREDMET_ID=C.PREDMET_ID
spojevi operatorske
komparacije - povezuju
podatke korišćenjem
komparativne
nejednakosti (<>),
korišćene u upitima
projektovanim da vrate
zapise koji nemaju neku
relaciju
samokomparirani spojevi,
povezuju podatke unutar
jedne tabele
spoljašni spojevi se
koriste ako je potrebno
uključiti i one slogove
koji ne zadovoljavaju
uslove
postoje levi, desni i pun
spoljašnji spoj
najuobičajeniji spojevi za izradu
selektovanih upita - prikazuju u
jednoj tabeli sve zapise koji imaju
odgovarajuće zapise u drugoj
tabeli
veza između zapisa je određena
istim vrednostima (u SQL-u where
polje1=polje2) u poljima koja
spajaju tabele
Equi j
oints
ili i
nner-
join
ts
Spojevi (Joins) u SQL
Outher joints
Self-jo
ints
Theta-joints
Naziv CenaKategorij
aProizvodja
c
Windows XP
$119.99 Software Microsoft
PhotoShop CS
$429.99 Software Adobe
Matična ploča
$149.99 Hardware Asus
Monitor $253.99 Hardware Samsung
Spojevi
PRIMER
Postoje dve tabele u bazi podataka:Proizvodi (Naziv, Cena, Kategorija, Proizvodjac) Kompanija (Ime, Akcija, Zemlja)
Potrebno je pronaći sve proizvode jeftinije od 200$ proizvedene u Japanu i selektovati njihova imena i cene
SELECT Naziv, CenaFROM Proizvod, KompanijaWHERE Proizvodjac=Ime AND Zemlja=‘Japan’ AND Cena <= 200
Veza između tabela Proizvod i KompanijaProizvodi Kompanija
Ime Akcija Zemlja
Microsoft 25 USA
Adobe 65 USA
Asus 15 Japan
Naziv Cena
Matična ploča $149.99
Značenje (Semantika) SQL upita
SELECT a1, a2, …, akFROM R1 AS x1, R2 AS x2, …, Rn AS xnWHERE Uslov
Odgovor = {}for x1 in R1 do for x2 in R2 do ….. for xn in Rn do if Uslov then Answer = Answer {(x1,…,xk)}return Answer
1. Ugneždene petlje
2. Paraleleni zadaci
Answer = {}for all assignments x1 in R1, …, xn in Rn do if Conditions then Answer = Answer {(x1,…,xk)}return Answer
Ugnježdeni upiti
Upiti kod kojih je jedna SELECT naredba ugrađena u WHERE klauzulu druge SELECT naredbe
Predikatski izrazi: IN, ANY, ALL, EXISTS
Operator IN podrazumeva da je levi operand unutar liste navedene kao desni operand ovog
operatora
IN
PRIMER
Prikazati najbolje plaćene radnike po radnim mestima
SELECT IME, PLATAFROM RADNICIWHERE (RADNO_MESTO_ID, PLATA) IN (SELECT RADNO_MESTO_ID,
MAX(PLATA) FROM RADNICI GROUP BY RADNO_MESTO_ID)
Operator ANY podrazumeva bilo koju vrednost iz ugnježdenog upita da ispunjavaju uslov
ANY
PRIMER
Prikazati radnike koji zarađuju više od proseka
SELECT IME, PLATA FROM RADNICIWHERE PLATA > ANY (SELECT AVG(PLATA) FROM RADNICI)
Izraz =ANY je ekvivalentan IN izrazu
Izraz != ALL ekvivalentan NOT IN izrazu
Operator ALL podrazumeva sve vrednosti iz ugnježdenog upita da ispunjavaju uslov
ALL
PRIMER
Prikazati radnike koji imaju platu veću od svih radnika
SELECT IME FROM RADNICIWHERE PLATA >= ALL (SELECT PLATA FROM RADNICI)
Proverava da li rezultujuća tabela ima barem jedan red
EXISTS
PRIMER
Prikazati ona radna mesta na kojima nema ni jednog radnika
SELECT * FROM RADNA_MESTA WHERE NOT EXISTS (
SELECT * FROM RADNICI WHERE RADNICI.RADNO_MESTO_ID=RADNA_MESTA.RADNO_MESTO_ID)
SELECT A.RADNO_MESTO_ID, A.NAZIVFROM RADNA_MESTA A, RADNICI BWHERE A.RADNO_MESTO_ID = B.RADNO_MESTO_ID (+) AND B.RADNIK_ID IS NULLSELECT RADNA_MESTA.RADNO_MESTO_ID, RADNA_MESTA.NAZIVFROM RADNA_MESTA LEFT JOIN RADNICION RADNA_MESTA.RADNO_MESTO_ID=RADNICI.RADNO_MESTO_IDWHERE RADNICI.RADNIK_ID IS NULL