23
SQL Structured Query Language

SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

  • Upload
    others

  • View
    15

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

SQL

Structured Query Language

Page 2: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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

Page 3: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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, ...

Page 4: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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

Page 5: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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]});

Page 6: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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]

Page 7: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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

Page 8: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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));

Page 9: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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]

Page 10: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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

Page 11: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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

Page 12: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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

Page 13: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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)

Page 14: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

3.1. Pretraživanje

� Uslov u where liniji može da sadrži:iskaze poreñenja(>,<,=,…), [not ]between , is [not ]null , [not ]like (poreñenje sa paternom, specijalni znaci % i _), a takoñe može da sadrži i drugi upit(podupit)... where ime_kolone= SOME(podupit)... where ime_kolone= ANY(podupit)

... where ime_kolone< ALL(podupit)

... where ime_kolone IN (podupit)

... where EXISTS (podupit)

Page 15: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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)

Page 16: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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

Page 17: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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

Page 18: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

3.1. Pretraživanje

� Agregatne funkcije: count, sum, avg, min, max

mogu 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

Page 19: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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

Page 20: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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

Page 21: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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’

Page 22: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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

Page 23: SQL - vps.ns.ac.rs · 1. ISTORIJA SQL predstavlja završnu fazu evolucije klase jezika razijene u IBM istraživačkoj laboratoriji u San Hozeu, Kalifornija – od jezika relacione

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.