bp 9 sql

Upload: boris-milovanovic

Post on 07-Jul-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/18/2019 BP 9 SQL

    1/67

    1

    UNIVERZITET U

    KRAGUJEVCU

    EKONOMSKI FAKULTET

    www.ekfak.kg.ac.rs

  • 8/18/2019 BP 9 SQL

    2/67

    2

    Predmet

    BAZE PODATAKA

    Dr Vladimir Ranković, DocentE-mail: [email protected]

  • 8/18/2019 BP 9 SQL

    3/67

    3

    Poglavlje 4

    Standardni upitni jezik SQL

  • 8/18/2019 BP 9 SQL

    4/67

    4

    SQL

    Nastao 1974. god. od strane Donalda D. Chamberlina i Raymond F.Boyce u IBM-ovoj istraživačkoj laboratoriji.

    Etape u razvoju:

    1986. god.: SQL-86Usvojen za standardni relacioni upitni jezik deklarativnog

    (neproceduralnog) tipa.

    1989. god.: SQL–89Definisani standardi koji se odnose na očuvanje integriteta baze podataka ipovezivanje sa drugim programskim jezicima.

    1992. god.: SQL-92

    1999. god.: SQL-1999Uveden mehanizam trigera (okidača), uvedena određena proceduralnaproširenja itd.

  • 8/18/2019 BP 9 SQL

    5/67

    5

    SQL

    Tipovi podataka (predefinisani domeni) u SQL-u:

    Numerički tipovi podataka:

    Tačni:

    INTEGER (INT),

    SMALLINT,

    NUMERIC (NUMERIC(p), NUMERIC(p,d)),

    DECIMAL (DECIMAL(p), DECIMAL(p,d)).

    Približni:

    REAL,

    DOUBLE PRECISION,

    FLOAT(p).

  • 8/18/2019 BP 9 SQL

    6/67

    6

    SQL

    Tipovi podataka (predefinisani domeni) uSQL-u:

    Tekstualni tipovi podataka:

    CHARACTER(broj karaktera) ili CHAR(brojkaraktera),

    CHARACTER VARYING(maksimalni broj karaktera)

    ili VARCHAR(maksimalni broj karaktera),

    CHARACTER LARGE OBJECT(maksimalni brojkaraktera) ili CLOB(maksimalni broj karaktera).

  • 8/18/2019 BP 9 SQL

    7/67

    7

    SQL

    Tipovi podataka (predefinisani domeni) u SQL-u:

    Datumski tipovi podataka:

    DATE(YYYY-MM-DD),

    TIME

    (HH:MM:SS),

    TIMESTAMP – objedinanjava TIME i DATE(YYYY-MM-DD: HH:MM:SS),

    TIME WITH TIME ZONE(HH:MM:SS+HH:MM)

    TIMESTAMP WITH TIME ZONE

    (YYYY-MM-DD: HH:MM:SS +HH:MM)

  • 8/18/2019 BP 9 SQL

    8/67

    8

    SQL

    Tipovi podataka (predefinisani domeni) u

    SQL-u:

    Intervalni tipovi podataka:

    INTERVAL YEAR,

    INTERVAL MONTH,

    INTERVAL YEAR TO MONTH, itd.

    Logički tip podatka BOOLEAN (TRUE, FALSE,

    UNKNOWN)

  • 8/18/2019 BP 9 SQL

    9/67

    9

    SQL

    Definisanje domena

    Predefinisani domeni

    Korisnički domeni

    predefinisani domen nad kojim je definisan,

    default vrednost,

    0, 1 ili više ograničenja.

  • 8/18/2019 BP 9 SQL

    10/67

    10

    SQL

    Definisanje domena

    Opšta sintaksa:

    CREATE DOMAIN AS [DEFAULT ][[CONSTRAINT ] CHECK (ograničenje)]

    Primer 1:

    Domen novac:CREATE DOMAIN novac AS DECIMAL (7,2)

    Primer 2:

    Domen vrsta_racuna:CREATE DOMAIN vrsta_racuna AS CHAR (1)DEFAULT ‘L’CONSTRAINT vrsta_racuna_proveraCHECK (value IN (‘L’, ‘R’, ‘P’))

  • 8/18/2019 BP 9 SQL

    11/67

    11

    SQL

    Promena domena

    Opšta sintaksa:

     ALTER DOMAIN  SET DEFAULT |

    DROP DEFAULT | ADD [CONSTRAINT ] CHECK(ograničenje) |DROP CONSTRAINT < naziv ograničenja > 

    Eliminisanje domena:

    DROP DOMAIN  

  • 8/18/2019 BP 9 SQL

    12/67

    12

    SQL

    Tabele i kolone – osnovna svojstva

    SQL radi sa tabelama

    Tabelu  čini uređena klekcija od jedne ili više kolona i

    neuređena kolekcija od nula ili više redova.

    Kolona odgovara atributu i ima svoje ime i tip podatka

    odnosno domen nad kojim je atribut definisan.

    Red je najmanja jedinica podatka koji se može uneti u

    tabelu ili izbrisati iz nje.

  • 8/18/2019 BP 9 SQL

    13/67

    13

    SQL

    Vrste tabela

    Bazna tabela

    Tabela čiji su podaci memorisani na disku ili u radnoj memoriji.

    Ne može da ima dve kolone sa istim nazivom.

    Izvedena tabela

    Tabela koja je rezultat izvršavanja upita.

    Može imati više kolona sa istim nazivom.

    Tabela pogleda

    Imenovani upit koji se može izvršiti korišćenjem datog imena.Rezultat je tabela pogleda.

    Ne može da ima dve kolone sa istim nazivom.

  • 8/18/2019 BP 9 SQL

    14/67

    14

    SQL Kreiranje tabela

    Opšta sintaksa:

    CREATE TABLE  ( [NOT NULL],

      [NOT NULL],...);

    Primer 1:

    Tabela RADNIK:

    CREATE TABLE RADNIK 

    (SRADNIK INTEGER NOT NULL,IME VARCHAR (20) NOT NULL,POSAO VARCHAR (20),SRUKOV INTEGER,DATZAP DATE,PLATA NUMERIC,PREMIJA NUMERIC,ODELJENJE# INTEGER NOT NULL);

    Primer 2:

    Tabela ODELJENJE:

    CREATE TABLE ODELJENJE(ODELJENJE# INTEGER NOT NULL, NAZIV VARCHAR (20) NOT NULL,GRAD VARCHAR (20) );

  • 8/18/2019 BP 9 SQL

    15/67

    15

    SQL

    Izmena tabela

    Dodavanje nove kolone, promena definicije postojeće kolone,

    izbacivanje kolone, dodavanje ili izbacivanje ograničenja navrednost podatka kolone.

    Dodavanje nove kolone:

     ALTER TABLE   ADD [COLUMN]  

    Primer:

    Dodavanje kolone BROJ_RADNIKA u tabelu ODELJENJE:

     ALTER TABLE ODELJENJE

     ADD COLUMN BROJ_RADNIKA NUMERIC (4);

  • 8/18/2019 BP 9 SQL

    16/67

    16

    SQL

    Izmena tabela

    Izmena definicije postojeće kolone:

     ALTER TABLE  

     ALTER COLUMN  SET DEFAULT |DROP DEFAULT;

    Primer 1:

    Postavljanje default vrednosti za kolonu GRAD u tabeli ODELJENJE: ALTER TABLE ODELJENJE ALTER COLUMN GRAD

    SET DEFAULT ‘KRAGUJEVAC’;

    Primer 2:

    Izbacivanje default vrednosti za kolonu DATZAP u tabeli RADNIK:

     ALTER TABLE RADNIK  ALTER COLUMN DATZAP

    DROP DEFAULT;

  • 8/18/2019 BP 9 SQL

    17/67

    17

    SQL

    Izmena tabela

    Izbacivanje kolone iz tabele:

     ALTER TABLE  DROP COLUMN  

    Primer 1:

    Izbacivanje kolone BROJ_RADNIKA iz tabeleODELJENJE:

     ALTER TABLE ODELJENJEDROP COLUMN BROJ_RADNIKA;

  • 8/18/2019 BP 9 SQL

    18/67

    18

    SQL

    Izbacivanje tabela

    Opšti oblik:

    DROP TABLE  

    Primer 1:

    Izbacivanje tabele RADNIK:

    DROP TABLE RADNIK;

    Razlika između DROP TABLE i DELETE!

  • 8/18/2019 BP 9 SQL

    19/67

    19

    SQL

    Ograničenje UNIQUE

    UNIQUE ograničenje je zadovoljeno ako i samo ako ne postoje dve vrste bazne tabele sa istimNOT NULL vrednostima u kolonama nad kojima je ograničenje postavljeno. NULL vrednosti

    se tretiraju kao nedefinisane vrednosti tj. nejednake vrednosti.

    UNIQUE kao ograničenje kolone:

    CREATE TABLE RADNIK (....

     MLB CHAR (13) UNIQUE,........);

    UNIQUE kao ograničenje tabele:

    CREATE TABLE RADNIK 

    (.... MLB CHAR (13),

    ....

    UNIQUE (MLB),

    ....);

    UNIQUE nad više kolona:

    UNIQUE(, , ...)

  • 8/18/2019 BP 9 SQL

    20/67

    20

    SQL

    Ograničenje PRIMARY KEY

    Pomoću ovog ograničenja se definiše primarni ključ tabele. Ovo ograničenje je

    zadovoljeno ako i samo ako ne postoje dva reda bazne tabele sa istimvrednostima u kolonama nad kojima je ograničenje specificirano i ne postoji ni jedna nedefinisana (NULL) vrednost u navedenim kolonama.

    Opšta sintaksa 1:

    CREATE TABLE RADNIK (SRADNIK INTEGER PRIMARY KEY,........);

    CREATE TABLE ODELJENJE

    (ODELJENJE# INTEGER PRIMARY KEY,........);

    SQL-89 standard je zahtevao da se specificira i ograničenje NOT NULL.

    SQL-92 dozvoljava da se definiše samo PRIMARY KEY, pri čemu se ograničenjeNOT NULL podrazumeva.

  • 8/18/2019 BP 9 SQL

    21/67

    21

    SQL

    Ograničenje PRIMARY KEY

    Opšta sintaksa 2:

    U slučaju da se ograničenje PRIMARY KEY definiše kao ograničenje tabelesintaksa je sledeća:

    CREATE TABLE RADNIK (SRADNIK INTEGER NOT NULL,

    ....CONSTRAINT RADNIK_PK PRIMARY KEY (SRADNIK),

    ....);

    CREATE TABLE ODELJENJE(ODELJENJE# INTEGER NOT NULL,....

    CONSTRAINT ODELJENJE_PK PRIMARY KEY (ODELJENJE#),....);

    U slučaju složenog ključa (primarni ključ čini više atributa (kolona)) onda se ovoograničenje isključivo setuje kao ograničenje tabele

    CONSTRAINT PRIMARY KEY (,naziv kolone2>,...)

  • 8/18/2019 BP 9 SQL

    22/67

    22

    SQL

    Rerefencijalno ograničenje (FOREIGN KEY)

    Pojam referencirane i referencirajuće tabele:

    Referencirana tabela je bazna tabela na čiju jednu ili više kolona se referenciraju kolonereferencirajuće tabele.

    Referencirane kolone u referenciranoj tabeli moraju da imaju ograničenje tipa PRIMARY KEY iliUNIQUE.

    Referencirajuća tabela je bazna tabela čije se, jedna ili više, kolona referenciraju na referencionekolone referencione tabele. Te kolone se nazivaju referencirajuće kolone.

    Primer:

    Tabela RADNIK je referencirajuća tabela zato što se njena kolona RADNIK.ODELJENJE#referencira na kolonu ODELJENJE.ODELJENJE#.

    Kolona ODELJENJE.ODELJENJE# je primarni ključ tabele ODELJENJE.

    Tabela ODELJENJE je referencirana tabela.

    Opšta sintaksa 1:

    CREATE TABLE RADNIK (.......ODELJENJE# NOT NULL

    REFERENCES ODELJENJE (ODELJENJE#),....);

  • 8/18/2019 BP 9 SQL

    23/67

    23

    SQL

    Rerefencijalno ograničenje (FOREIGN KEY)

    Opšta sintaksa 2:Referencijalno ograničenje definisano kao ograničenje tabele.

    CREATE TABLE RADNIK (.......CONSTRAINT ODELJENJE_FK FOREIGN KEY (ODELJENJE#)

    REFERENCES ODELJENJE (ODELJENJE#),....);

    U slučaju složenog stranog ključa:

    CREATE TABLE naziv_tabele(.......CONSTRAINT naziv_ogranicenja FOREIGN KEY (,

     ,...)REFERENCES naziv_tabele (,

     ,...),....);

  • 8/18/2019 BP 9 SQL

    24/67

    24

    SQL

    Rerefencijalno graničenje (FOREIGN KEY)

    Referencijalne akcije:

    NO ACTION,

    RESTRICT,

    CASCADE,

    SET NULL,

    SET DEFAUL.

    CREATE TABLE RADNIK (.......ODELJENJE# INTEGER NOT NULL REFERENCES ODELJENJE

    ON DELETE NO ACTION

    ON UPDATE NO ACTION,....);

    CREATE TABLE RADNIK (.......ODELJENJE# INTEGER NOT NULL REFERENCES ODELJENJE

    ON DELETE CASCADE,

    ....);

  • 8/18/2019 BP 9 SQL

    25/67

    25

    SQL

    Operacije - upiti

    Opšti oblik:

    SELECT  FROM   WHERE ;

    SELECT ima funkciju PROJEKCIJE

     WHERE služi za definisanje uslova SELEKCIJEodnosno SPAJANJA.

    SELECT i FROM su obavezne dok WHERE nije.

  • 8/18/2019 BP 9 SQL

    26/67

    26

    SQL

    Upiti tipa projekcije

    Prikazati šifre, nazive i lokacije svih odeljenja iz relacije o

    odeljenjima:

    SELECT ODELJENJE#, NAZIV, GRADFROM ODELJENJE;

  • 8/18/2019 BP 9 SQL

    27/67

    27

    SQL

    Upiti tipa projekcije

    Prikazati nazive i šifre svih odeljenja:

    SELECT NAZIV, ODELJENJE#FROM ODELJENJE;

  • 8/18/2019 BP 9 SQL

    28/67

    28

    SQL

    Upiti tipa projekcije

    Prikazati sve poslove radnika:

    SELECT POSAOSELECT POSAO iliiliFROM RADNIK FROM RADNIK ;;

    SELECT DISTINCT POSAOSELECT DISTINCT POSAO

    FROM RADNIK FROM RADNIK ;;

  • 8/18/2019 BP 9 SQL

    29/67

    29

    SQL

    WHERE klauzula

    Koristi se sa SELECT, UPDATE i DELETE naredbom.

    Osnovni zadatak je da se definiše uslov selekcije.

    Ako je podatak nad kojim se primenjuje WHERE klauzula brojnog tipanajčešće korišćeni operatori poređenja su: jednako – “=”, različito –“”, veće – “>”, manje – “=”, manje ili

     jednako”

  • 8/18/2019 BP 9 SQL

    30/67

    30

    SQL

    WHERE klauzula – Primeri:

    Prikazati sve podatke o radnicima koji rade u odeljenju 30.

    SELECT *FROM RADNIK 

     WHERE ODELJENJE# = 30;

    SQ

  • 8/18/2019 BP 9 SQL

    31/67

    31

    SQL

    WHERE klauzula – Primeri:

    Prikazati sve podatke o radnicima koji ne rade u odeljenju

    30.

    SELECT *FROM RADNIK 

     WHERE ODELJENJE# 30;

    Prikazati sve podatke o radnicima koji imaju veću premijuod plate

    SELECT *FROM RADNIK  WHERE PREMIJA > PLATA;

    SQL

  • 8/18/2019 BP 9 SQL

    32/67

    32

    SQL

    WHERE klauzula – Primeri:

    Prikazati sve podatke o radnicima koji su zaposleni posle

    8.9.1981. god.

    SELECT *FROM RADNIK 

     WHERE DATZAP > ‘1981-09-08’;

    Prikazati ime, posao i platu svakog radnika iz odeljenja 20 kojizarađuje više od 20000 din.

    SELECT IME, POSAO, PLATA FROM RADNIK 

     WHERE ODELJENJE# = 20 AND PLATA > 20000;

    SQL

  • 8/18/2019 BP 9 SQL

    33/67

    33

    SQL

    WHERE klauzula – Primeri:

    Prikazati sve podatke o rukovodiocima odeljenja i predsedniku.

    SELECT *FROM RADNIK 

     WHERE POSAO = ‘RUKOVODILAC’ OR POSAO =‘PREDSEDNIK’;

    SQL

  • 8/18/2019 BP 9 SQL

    34/67

    34

    SQL

    WHERE klauzula – Primeri:

    Prikazati ime, platu, posao i sifru odeljenja za rukovodioce koji ne rade uodeljenju 30.

    SELECT IME, PLATA, POSAO, ODELJENJE#FROM RADNIK 

     WHERE POSAO = ‘RUKOVODILAC’ AND NOT (ODELJENJE# = 30);

    ili

     WHERE POSAO = ‘RUKOVODILAC’ AND ODELJENJE# 30;

    SQL

  • 8/18/2019 BP 9 SQL

    35/67

    35

    SQL

    WHERE klauzula – Primeri:

    Prikazati ime, platu, posao i šifru odeljenja za

    rukovodioce i analitičare koji rade u odeljenju 10.

    SELECT IME, PLATA, POSAO, ODELJENJE#FROM RADNIK 

     WHERE (POSAO = ‘RUKOVODILAC’ OR POSAO =‘ANALITICAR’) AND ODELJENJE# = 10;

    SQL

  • 8/18/2019 BP 9 SQL

    36/67

    36

    SQL

    WHERE klauzula – Primeri:

    Prikazati ime, posao i platu radnika koji zarađuju između

    120000 i 150000.

    SELECT IME, POSAO, PLATA FROM RADNIK 

     WHERE PLATA BETWEEN 120000 AND 150000;

    ili

    SELECT IME, POSAO, PLATA FROM RADNIK  WHERE PLATA >= 120000 AND PLATA

  • 8/18/2019 BP 9 SQL

    37/67

    37

    SQL

    WHERE klauzula – Primeri:

    Prikazati ime, posao i šifru odeljenja radnika koji nisu

    analitičari, savetnici niti trgovački putnici.

    SELECT IME, POSAO, ODELJENJE#

    FROM RADNIK  WHERE POSAO NOT IN (‘ANALITICAR’,‘SAVETNIK’, ‘TRG_PUTNIK’);

    SQL

  • 8/18/2019 BP 9 SQL

    38/67

    38

    SQL

    WHERE klauzula – Primeri:

    Prikazati ime, posao i šifru odeljenja radnika čija imena počinju sa M.

    SELECT IME, POSAO, ODELJENJE#

    FROM RADNIK  WHERE IME LIKE ‘M%’;

    Postoje dva standardna specijalna karaktera:

    % - predstavlja niz od 0 ili više karaktera

     _ - predstavlja tačnu poziciju karaktera

    Primer:

    Prikazati ime, posao i šifru odeljenja radnika u čijem imenu treći karakter je R.

    SELECT IME, POSAO, ODELJENJE#FROM RADNIK  WHERE IME LIKE ‘__R%’;

    SQL

  • 8/18/2019 BP 9 SQL

    39/67

    39

    SQL

    Nula vrednosti – NULL: Mogu se definisati dve vrste nula (NULL) vrednosti:

    “još uvek nepoznata vrednost”

    “neprimenjivo svojstvo”

    SQL podržava samo jednu vrstu nula (NULL) vrednosti i to prvu vrstu.

    Provera da li neki podatak ima ili nema nula (NULL) vrednost se vrši

    pomoću klauzule IS NULL odnosno IS NOT NULL.

    Primer:

    Prikazati ime i posao radnika čija je premija nepoznata.

    SELECT IME, POSAOFROM RADNIK 

     WHERE PREMIJA IS NULL;

    SQL

  • 8/18/2019 BP 9 SQL

    40/67

    40

    SQL

    ORDER BY klauzula:

    Koristi se za sortiranje rezultujuće tabele po jednom ili višeatributa u opadajućem ili rastućem redosledu:

    rastući redosled - ASC

    opadajući redosled - DESC

    Primer:

    Prikazati ime, posao i platu radnika u odeljenju 30 uređene urastućem redosledu poslova i opadajućem redosledu plata.

    SELECT IME, POSAO, PLATA FROM RADNIK 

     WHERE ODELJENJE# = 30ORDER BY POSAO ASC, PLATA DESC;

    SQL

  • 8/18/2019 BP 9 SQL

    41/67

    41

    SQL

    Agregatne funkcije:

     Agregatne funkcije se koriste za dobijanje izvedenih, sumarnih informacija.

    Primena agregatne funkcije se zasniva na grupisanju redova tabele po određenomkriterijumu. Rezultat je obično novi red u kome se nalazi rešenje primenjene agregatnefunkcije.

    Najznačajnije agregatne funkcije su:

     AVG(naziv_kolone),

    SUM(naziv_kolone),

    MIN(naziv_kolone),

    MAX(naziv_kolone),

    COUNT(*).

    AVG i SUM su definisane nad kolonama numeričkog ili intervalnog tipa a ostaleagregatne funkcije nad kolonama bilo kog tipa.

    Agregatne funkcije prilikom računanja ne obrađuju nula vrednosti podataka ukolonama.

    SQL

  • 8/18/2019 BP 9 SQL

    42/67

    42

    SQL

    Agregatne funkcije – Primeri:

    Naći minimalnu, srednju i maksimalnu platu, kao i broj

    radnika u odeljenju 10.

    SELECT MIN(PLATA), AVG(PLATA), MAX(PLATA),COUNT(*)FROM RADNIK  WHERE ODELJENJE# = 10;

    SQL

  • 8/18/2019 BP 9 SQL

    43/67

    43

    SQL

    Agregatne funkcije – Primeri:

    Naći ukupnu platu i ukupnu premiju za trgovačke putnike.

    SELECT SUM(PLATA), SUM(PREMIJA),FROM RADNIK  WHERE POSAO = ‘TRG_PUTNIK’;

    SQL

  • 8/18/2019 BP 9 SQL

    44/67

    44

    SQL

    Agregatne funkcije – Primeri:

    Koliko je srednje godišnje primanje trgovačkih putnika?

    SELECT AVG(PLATA + PREMIJA) * 12,FROM RADNIK  WHERE POSAO = ‘TRG_PUTNIK’;

    SQL

  • 8/18/2019 BP 9 SQL

    45/67

    45

    SQL

    Agregatne funkcije – GROUP BY klauzula:

    Ukoliko grupisanje nije eksplicitno specificirano onda svi redovi kojiispunjavaju kriterijum selekcije definisan u okviru WHERE klauzulečine jednu grupu.

    Eksplicitno specificiranje kriterijuma grupisanja se vrši pomoćuklauzule GROUP BY.

    Primer:Naći minimalnu, srednju i maksimalnu platu kao i ukupan brojradnika u svakom odeljenju.

    SELECT MIN(PLATA), AVG(PLATA), MAX(PLATA),COUNT(*)FROM RADNIK 

     WHERE ODELJENJE# = 10; (za odeljenje 10)

     WHERE ODELJENJE# = 20; (za odeljenje 20) WHERE ODELJENJE# = 30; (za odeljenje 30) itd.

    SQL

  • 8/18/2019 BP 9 SQL

    46/67

    46

    SQL

    Agregatne funkcije – GROUP BY klauzula:

    Primer:

    Naći minimalnu, srednju i maksimalnu platu kao i ukupanbroj radnika u svakom odeljenju.

    SELECT MIN(PLATA), AVG(PLATA), MAX(PLATA),

    COUNT(*)FROM RADNIK GROUP BY ODELJENJE#;

    SQL

  • 8/18/2019 BP 9 SQL

    47/67

    47

    SQ

    Agregatne funkcije – GROUP BY klauzula:

    Primer:Izračunati broj radnika koji obavljaju isti posao unutar

    svakog odeljenja.

    SELECT ODELJENJE#, POSAO, COUNT(*)FROM RADNIK GROUP BY ODELJENJE#, POSAO;

    SQL

  • 8/18/2019 BP 9 SQL

    48/67

    48

    Q

    Agregatne funkcije – GROUP BY klauzula:

    WHERE i GROUP BY se mogu koristi zajedno pri čemu WHEREuvek ide pre klauzule GROUP BY.

    Primer:Odrediti srednju godišnju platu za svako odeljenje. Pri računanjune uzimati u obzir predsednika niti rukovodioce odeljenja.

    SELECT AVG(PLATA)*12, ODELJENJE#FROM RADNIK  WHERE POSAO NOT IN (‘RUKOVODILAC’,’PREDSEDNIK’)GROUP BY ODELJENJE#;

    SQL

  • 8/18/2019 BP 9 SQL

    49/67

    49

    Agregatne funkcije – HAVING klauzula:

    HAVING klauzulom se definišu kriterijumi za selekciju grupa kojesu prethodno specificirane GROUP BY klauzulom.

    Primer:Prikazati koje poslove obavlja više od dva radnika u svakomodeljenju.

    SELECT ODELJENJE#, POSAO, COUNT(*)FROM RADNIK GROUP BY ODELJENJE#, POSAOHAVING COUNT(*) > 2;

    SQL

  • 8/18/2019 BP 9 SQL

    50/67

    50

    Agregatne funkcije – HAVING i WHERE klauzula:

    WHERE klauzula definiše kriterijum za selekciju

    pojedinačnih redova koji treba da budu uključeni u postupak

    grupisanja.

    HAVING klauzulom se definišu kriterijumi za selekciju grupa

    koje su prethodno specificirane GROUP BY klauzulom.

    SQL

  • 8/18/2019 BP 9 SQL

    51/67

    51

    Spajanje dve ili više tabela - JOIN

    Služi za prikazivanje podataka iz više tabela.

    Povezuje n-torke (vrste) različitih tabela koristeći zajedničkeatribute, odnosno atribute definisane nad istim domenima.

    Podržani su sledeći tipovi spajanja:

    dekartov proizvod,

    ekvispajanje,

    prirodno spajanje i

    spoljno spajanje.

    SQL

  • 8/18/2019 BP 9 SQL

    52/67

    52

    Dekartov proizvod

    Primer: Prikazati imena radnika koji suanalitičari i nazive gradova u kojim senalaze odeljenja.

    SELECT IME, GRAD

    FROM RADNIK, ODELJENJE WHERE POSAO = ‘ANALITICAR’;

    SQL

  • 8/18/2019 BP 9 SQL

    53/67

    53

    Ekvispajanje

    Primer: Prikazati ime, posao i podatke o odeljenju

    u kom radi za svakog radnika.

    SELECT IME, POSAO, RADNIK.SODELJENJE,

    ODELJENJE.SODELJENJE, NAZIV, GRADFROM RADNIK, ODELJENJE WHERE RADNIK.SODELJENJE = ODELJENJE.SODELJENJE;

    Prikaz svih atributa:

    SELECT RADNIK.*, ODELJENJE.*FROM RADNIK, ODELJENJE WHERE RADNIK.SODELJENJE = ODELJENJE.SODELJENJE;

    SQL

  • 8/18/2019 BP 9 SQL

    54/67

    54

    Ekvispajanje – Eksplicitno navođenje

    Primer: Prikazati sve podatke o radniku i odeljenju

    u kojem on radi.

    SELECT *

    FROM RADNIK JOIN ODELJENJEON RADNIK.SODELJENJE = ODELJENJE.SODELJENJE;

    Odnosno:

    SELECT *FROM RADNIK JOIN ODELJENJE USING (SODELJENJE);

    SQL

  • 8/18/2019 BP 9 SQL

    55/67

    55

    Prirodno spajanje – Eksplicitno navođenje

    Primer: Prikazati sve podatke o radniku i odeljenju

    u kojem on radi.

    SELECT *

    FROM RADNIK NATURAL JOIN ODELJENJE;

    SQL

  • 8/18/2019 BP 9 SQL

    56/67

    56

    Spoljno spajanje

    Opšta sintaksa:

    {LEFT, RIGHT, FULL} OUTER JOIN

    Primer: Prikazati naziv odeljenja, ime i posaosvakog radnika uključujući i odeljenje bez radnika.

    SELECT NAZIV, IME, POSAO

    FROM ODELJENJE LEFT OUTER JOIN RADNIK ONODELJENJE.SODELJENJE = RADNIK.SODELJENJE;

    SQL

  • 8/18/2019 BP 9 SQL

    57/67

    57

    Ažuriranje baze podataka:

    Podrazumeva:

    Dodavanje reda ili redova tabele (naredba INSERT),

    Izmenu sadržaja postojećeg reda ili redova tabele(naredba UPDATE),

    Brisanje postojećeg reda ili redova tabele (naredba

    DELETE).

    SQL

  • 8/18/2019 BP 9 SQL

    58/67

    58

    Dodavanje novih redova – INSERT

    Varijante:

    Ubacivanje vrednosti svih atributa n-torke,

    Ubacivanje vrednosti nekih atributa n-torke,

    Ubacivanje podataka iz jedne tabele u drugu.

    SQL

  • 8/18/2019 BP 9 SQL

    59/67

    59

    Ubacivanje vrednosti svih atributa n-torke Opšta sintaksa:

    INSERT INTO naziv_tabele VALUES (vrednost_art1, vrednost_art2, ...)

    Primer:Ubaciti podatke o Bojanu, pravniku, koji počinje da radi u odeljenju 10 od7.04.1984 sa platom od 45000 i bez prava na premiju. Neposrednirukovodilac još nije poznat.

    INSERT INTO RADNIK  VALUES (3545, ‘Bojan’, ‘Pravnik’, NULL, ‘1984-04-07’,45000, NULL, 10)

    Napomena:

    Za svaki atribut se mora ubaciti vrednost, pri čemu je NULL dozvoljena opcijaza svaki atribut koji u deklaraciji tabele nije NOT NULL.

    SQL

  • 8/18/2019 BP 9 SQL

    60/67

    60

    Ubacivanje vrednosti nekih atributa n-torke

    Opšta sintaksa:

    INSERT INTO naziv_tabele (atr1, atr2,...) VALUES (vrednost_art1, vrednost_art2, ...)

    Primer:Uneti podatke o Sr đanu, planeru, koji je primljen u odeljenje 20.

    INSERT INTO RADNIK (IME, SRADNIK, ODELJENJE#,POSAO)

     VALUES (‘Srđ an’, 3562, 20, ‘Planer’);

    SQL

  • 8/18/2019 BP 9 SQL

    61/67

    61

    Ubacivanje podataka iz jedne tabele u drugu

    Ukoliko obe tabele imaju isti broj atributa i ukoliko su atributiidentično definisani opšta sintaksa je:

    INSERT INTO tabela1SELECT * FROM tabela2

    inače:

    INSERT INTO tabela1 (atr1, atr2,...)SELECT atr, izraz,...FROM tabela2

     WHERE kriterijum selekcije

    SQL

  • 8/18/2019 BP 9 SQL

    62/67

    62

    Ubacivanje podataka iz jedne tabele u drugu

    Primer:Dati svim analitičarima i savetnicima premiju u iznosu od

    10% plate. Te informacije uneti u tabelu PREMIJA zajednosa datumom zaposlenja.

    INSERT INTO PREMIJA (SRADNIK, PREMIJA,POSAO, DATZAP)SELECT SRADNIK, PLATA * 0.1, POSAO, DATZAPFROM RADNIK  WHERE POSAO IN (‘ANALITICAR’,’SAVETNIK’)

    SQL

  • 8/18/2019 BP 9 SQL

    63/67

    63

    Izmena sadržaja – UPDATE

    Opšti oblik sintakse:

    UPDATE tabelaSET atr1=izraz1, [atr2=izraz2][WHERE kriterijum selekcije n-torki]

    Primer1:Novoprimljeni pravnik Bojan imaće predsednika zaneposrednog rukovodioca.

    UPDATE RADNIK 

    SET SRUKOV = 3539 WHERE IME = ‘Bojan’;

    SQL

  • 8/18/2019 BP 9 SQL

    64/67

    64

    Izmena sadržaja – UPDATE

    Primer2:Sr đan počinje da radi 19.9.84. god. Sa platom od 35000 i ima neposrednogrukovodioca sa šifrom 3266.

    UPDATE RADNIK SET SRUKOV = 3366,

    DATZAP = ‘1984-09-19’,PLATA = 35000,

     WHERE IME = ‘Srđ an’;

    Primer3:

    Dati svim analitičarima i savetnicima u odeljenju 20 povišicu na platu od 15% .

    UPDATE RADNIK SET PLATA = PLATA * 1.15 WHERE POSAO IN (‘ANALITICAR’, ‘SAVETNIK’) AND ODELJENJE# = 20;

    SQL

  • 8/18/2019 BP 9 SQL

    65/67

    65

    Brisanje n-torki tabele – DELETE

    Opšti oblik sintakse:

    DELETE [FROM] tabela[WHERE kriterijum selekcije n-torki]

    Primer1:

    Izbaciti podatke o Bojanu, jer je on napustio radnuorganizaciju.

    DELETE FROM RADNIK  WHERE IME = ‘Bojan’;

    SQL

  • 8/18/2019 BP 9 SQL

    66/67

    66

    Brisanje n-torki tabele – DELETE

    Primer1:

    Izbaciti podatke o svim radnicima odeljenjapriprema.

    DELETE FROM RADNIK  WHERE ODELJENJE# IN(SELECT ODELJENJE#FROM ODELJENJE

     WHERE NAZIV = ‘PRIPREMA’);

  • 8/18/2019 BP 9 SQL

    67/67

    67

    BAZE PODATAKA

    Dr Vladimir Ranković, docent

    [email protected]