28
Osnove SQL Prof. dr MILORAD K. BANJANIN Univerzitet u Istočnom Sarajevu Univerzitet u Istočnom Sarajevu Tehnološki fakultet Zvornik Tehnološki fakultet Zvornik

Osnove SQL

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

Prof. dr Milorad Banjanin

HVALA NA HVALA NA PAŽNJIPAŽNJI