sql · 2011. 12. 20. · 3.1. pretraživanje puni upitni blok se dobija primenom skupovnih...

23
SQL Structured Query Language

Upload: others

Post on 29-Jan-2021

1 views

Category:

Documents


0 download

TRANSCRIPT

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