Post on 29-Jan-2021
SQL
Structured Query Language
1. ISTORIJA� SQL predstavlja završnu fazu evolucije klase jezika
razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione algebre ka jezicima relacionog računa.
� Svi jezici su skupovno orjentisani i omogućavaju zadavanje onoga šta se želi dobiti bez preciznog navoñenja kako
� SQUERE, SEQUEL, SEQUEL/2� 1986 prvi standard upitnog jezika baze podataka –
ANSI SQL/86� SQL/89, SQL92 ili SQL2 - aktuelni
2. Definisanje podataka
� Osnovni iskazi za definisanje podataka su:iskazi za kreiranje, iskazi za izmenu strukture i iskazi za brisanje
� Osnovni objekti baze podataka: šema, tabela, indeks, pogled, ...
2.1. Šema
� Šema je kolekcija objekata baze podataka, logički klasifikovanih.
� Kreiranje šeme:CREATE SCHEMAime_scheme[ AUTHORIZATION ime_vlasnika_scheme]
[ CREATE TABLE iskaz{, CREATE TABLE iskaz}][ CREATE VIEW iskaz{, CREATE VIEW iskaz}][ CREATE INDEX iskaz{, CREATE INDEX iskaz}][ GRANT iskaz{, GRANT iskaz}]
� Uklanjanje šeme:DROP SCHEMAime_scheme RESTRICT
2.2. Tabele
� Tabela predstavlja relaciju� Tabela sadrži redove i kolone; Red predstavlja
rekord(slog); Kolone predstavljaju atribute sloga� Kreiranje tabele:
CREATE TABLEime_tabele(kolona1 tip_podatka [ not
null ][ unique ][[ WITH] DEFAULTvrednost][ogranicenje]
{, kolona2 tip_podatka [ not null ][ unique ][[ WITH] DEFAULTvrednost][ogranicenje]}
[ogranicenje]{, [ogranicenje]});
2.2. Tabele
• Tipovi podataka:char (n) , varchar2 (n), number (o,d), date ,long (2GB)
• Ograničenje:[ constraint ime] primary_key (ime_kolone{, ime_kolone})
[ constraint ime] foreign key (ime_kolone{, ime_kolone}) references odnosna_tabela[ ON DELETE efekat][ ON UPDATE efekat]
2.2. Tabele
� Efekti pri UPDATE mogu biti:NO ACTION – ne dozvoljava izmenu osim ako se radi o primarnom ključu za koga ne postoji vrednost stranog u zavisnoj tabeliRESTRICT – isto kao NO ACTION, ali se izvrašava pre svih drugih efekata
� Efekti pri DELETE sem NO ACTION i RESTRICT:SET NULL – briše vrednost primarnog ključa, astrani setuje na nullCASCADE – briše kaskadno zavisne vrednosti
2.2. TabeleCREATE TABLEcustomer_all(
customer_id number not null unique,co_id number not null unique,primary key (customer_id));
CREATE TABLEcontract_all(co_id number not null unique,contract varchar2(30) not null,primary key (co_id));
CREATE TABLEdirectory_number(dn_num varchar2(9) not null unique,pin char(4) not null,customer_id number not nullprimary key (dn_num));
2.2. Tabele
� Izmena tabele:ALTER TABLE ime_tabele
ADD ime_kolone tip_podataka [ not null ][[ WITH] DEFAULT vrednost][ogranicenje]
| ADD ogranicenje
| DROPogranicenje
| MODIFY ime_kolone tip_podataka [ not null ][[ WITH] DEFAULT vrednost][ogranicenje]
� Brisanje tabele:DROP TABLE ime_tabele [ CASCADE]
2.3. Indeksi
� Indeks se može posmatrati kao ureñen skup pokazivača na vrste tabele, koji je fizički odvojen od tabele(struktura koja se održava automatski)
� Kreiranje indeksa:CREATE [UNIQUE] INDEX ime_indeksa ON ime_tabele(ime_kolone [ ASC| DESC]
{,ime_tabele(ime_kolone [ ASC| DESC]})
� Uklanjanje indeksa:DROP INDEX ime_indeksa
2.4. Pogledi
� Pogledi su virtualne tabele koje nemaju fizičku reprezentaciju, već se pamti njihova definicija u terminima drugih tabela
� Kreiranje pogleda:CREATE [OR REPLACE] VIEW ime_pogleda[(kolona {, kolona})] AS puni_upitni_blok
[ WITH CHECK OPTION]
� Uklanjanje pogleda:DROP VIEW ime_pogleda
3. Manipulisanje podacima
� Osnovni iskazi za manipulisanje podacima su:SELECT - iskaz za pretraživanje, INSERT - iskaz za umetanje UPDATE - iskaz za ažuriranjeDELETE – iskaz za brisanje
3.1. Pretraživanje
� Osnovni oblik iskaza za pretraživanje je jednostavni upitni blok :SELECT [ distinct | all ] kolona{, kolona}FROMime_tabele[ WHEREuslov][ ORDER BY kolona {, kolona}[ asc | desc ]]
� Skalarni izrazi mogu da se jave u select i whereliniji: abs , +, - , * , / , sqrt , ...(za brojeve); concat(str1,str2),upper , lower , replace , substr(str,m,n), ...(za stringove); to_char , add_month ,...(za datum)
3.1. Pretraživanje
� Uslov u where liniji može da sadrži:iskaze poreñenja(>,
3.1. Pretraživanje
� Korelisani podupit – u podupitu se javlja poreñenje sa tabelom iz glavnog upita
SELECT dn_num
FROMdirectory_number dn
WHERE10 in( SELECT co_id
FROMcustomer_all ca
WHERE ca.customer_id=dn.customer_id)
3.1. Pretraživanje
� Upiti spajanja:SELECT [ distinct | all ] kolona{, kolona}
FROMime_tabele1, ime_tabele2
...
• Prirodno spajanjeSELECT *
FROMdirectory_number dn, customer_all ca
WHEREca.customer_id=dn.customer_id
3.1. Pretraživanje
• Spajanje više tabelaSELECT *
FROMdirectory_number dn, customer_all ca, contract_all co
WHEREca.customer_id=dn.customer_id and ca.co_id=co.co_id
• Spajanje tabele sa samom sobomSELECT *
FROMdirectory_number dn1, directory_number dn2
WHEREdn1.pin=dn2.pin
3.1. Pretraživanje
� Agregatne funkcije: count, sum, avg, min, maxmogu se naći u select liniji i upita i podupita, ali ne u where liniji, a sem njih se tada u select liniji ne smeju javiti drugi argumenti(izuzetak je pri grupisanju) SELECT COUNT(*)
FROMdirectory_number
SELECT COUNT( DISTINCT pin)
FROMdirectory_number
3.1. Pretraživanje
� Grupisanje:SELECT kolona{, kolona}[agregatna_funkcija]FROMime_tabele[ WHEREuslov]GROUP BYkolona{, kolona}[ HAVING COUNTuslov_grupisanja]
SELECT customer_id, min (dn_num), max(dn_num)FROMdirectory_numberWHEREcustomer_id between 10 and 20GROUP BYcustomer_idHAVING COUNT(*)>1
3.1. Pretraživanje
� Puni upitni blok se dobija primenom skupovnih operacija unije, preseka i/ili razlike na jednostavne ili pune upitne blokove.
upitni_blok1 UNION [ ALL] upitni_blok2
upitni_blok1 INTERSECT upitni_blok2
upitni_blok1 EXCEPT/ MINUS(Oracle) upitni_blok2
3.2. Umetanje
� Umetanje nove vrste u tabelu se vrši na dva načina:1.INSERT INTO ime_tabele [(kolona{,kolona})]
VALUES (konstatna {,konstanta})2. INSERT INTO ime_tabele [(kolona{,kolona})]
puni_upitni_blok
INSERT INTO contract_all(co_id,contract)VALUES (100,’10-10-1000-1000’)
INSERT INTO korisnik(customer_id,co_id,dn_num)SELECT * FROM customer_all c,directory_number dWHERE c.customer_id=d.customer_id and d.pin=‘0000’
3.3. Ažuriranje
� Ažuriranje predstavlja promenu postojećih vrednosti u tabeli.UPDATE ime_tabele
SET ime_kolone=izraz{, ime_kolone=izraz}
[ WHEREuslov]
UPDATE directory_number
SET pin=‘1111’
WHEREdn_num like ‘659999%’
� Efekti pri ažuriranju su: RESTRICT i NO ACTION
3.4. Brisanje
� Za brisanje vrsta iz tabele koristi se iskaz:DELETE FROM ime_tabele
[ WHEREuslov]
DELETE FROMcontract_all
WHEREco_id < 0
� Efekti pri brisanju su: RESTRICT, NO ACTION, SET NULL i CASCADE.