33

baze knjiga i prezentac marta.pdf

Embed Size (px)

Citation preview

Page 1: baze knjiga i prezentac marta.pdf
Page 2: baze knjiga i prezentac marta.pdf
Page 3: baze knjiga i prezentac marta.pdf
Page 4: baze knjiga i prezentac marta.pdf
Page 5: baze knjiga i prezentac marta.pdf
Page 6: baze knjiga i prezentac marta.pdf
Page 7: baze knjiga i prezentac marta.pdf
Page 8: baze knjiga i prezentac marta.pdf

da ne gleda velika mala slova gornji primjer s ilike,

Page 9: baze knjiga i prezentac marta.pdf

sve ispadne za primjer gore – kartezijev produkt

Page 10: baze knjiga i prezentac marta.pdf
Page 11: baze knjiga i prezentac marta.pdf
Page 12: baze knjiga i prezentac marta.pdf

katedra koja ima tocno 1 predmet ;

Page 13: baze knjiga i prezentac marta.pdf

spajamo katedru i broj predmeta grupiran prema katedri, having count(*) = max od svih brojeva

predmeta

max od svih brojeva predmeta = ( select max(novoime.broj_predmeta) from ( select katedra_id,

count(*) as broj_predmeta from predmeti group by katedra_id) as novoime);

Page 14: baze knjiga i prezentac marta.pdf

AKTIVNI KOMPLEMENT

Page 15: baze knjiga i prezentac marta.pdf

AKTIVNI komplement

Page 16: baze knjiga i prezentac marta.pdf

create domain pozitivan_broj as smallint default 0 check( value>0).

create table brojevi_domena ( broj pozitivan_broj).

alter domain , drop domain

create unique index ime on tablica(redovi); drop index ;

create table ime as select distinct ime2 from ime

Page 17: baze knjiga i prezentac marta.pdf
Page 18: baze knjiga i prezentac marta.pdf

psql < baza

psql < brisi

Sekvence su objekti kojima se generiraju brojaci,

CREATE SEQUENCE brojac;

SELECT * FROM brojac;

SELECT NEXTVAL (‘brojac’);

SELECT CURRVAL (‘brojac’);

SELECT SETVAL(‘brojac',120);

SELECT NEXTVAL (‘brojac’);

DROP SEQUENCE brojac;

RESTRICT – ne dozvoljava promjenu ili brisanje

• Indeksi su objekti sustava za upravljanje bazama podataka

koji poboljšavaju upitne performanse baze podataka.

• Indeksi omogucuju brže pretraživanje podataka u

tablicama

RESTRICT – ne dozvoljava promjenu ili brisanje PK

– CASCADE – kaskadno se radi promjena i brisanje

– SET NULL – vrijednost VK postaje NULL

– SET DEFAULT – vrijednost VK se postavlja na DEFAULT

B-tree indeksi

– R-tree indeksi

– Hash indeksi

– GiST indeksi

Transakcija zapocinje naredbom BEGIN; nakon toga

dolaze preostale naredbe sve do naredbe COMMIT ili

ROLLBACK (ABORT):

GRANT SELECT ON autor TO PUBLIC;

SELECT ("read")

w -- UPDATE ("write")

a -- INSERT ("append")

d -- DELETE

R -- RULE

x -- REFERENCES

t – TRIGGER

Page 19: baze knjiga i prezentac marta.pdf

REVOKE SELECT ON autor FROM PUBLIC;

SELECT prezime, ime

INTO autori_clanovi

FROM autor

UNION

SELECT prezime, ime FROM clan;

CREATE FUNCTION zbroji (integer, integer)

RETURNS integer

AS 'select $1 + $2;'

LANGUAGE SQL;

DROP FUNCTION zbroji (integer, integer);

Kreirajte funkciju koja briše sve podatke iz

tablice autori_clanovi:

CREATE FUNCTION isprazni() RETURNS void AS '

DELETE FROM autori_clanovi; '

LANGUAGE SQL;

SELECT isprazni();

INSERT INTO autori_clanovi

SELECT prezime, ime FROM autor

UNION SELECT prezime, ime FROM clan;

CREATE FUNCTION provjera_datuma_vracanja () RETURNS

trigger as '

BEGIN

IF new.datum_posudbe>new.datum_vracanja THEN

RAISE EXCEPTION '' Datum vracanja je manji od datuma

Page 20: baze knjiga i prezentac marta.pdf

posudbe!'';

END IF;

RETURN NEW;

END;

' LANGUAGE 'plpgsql';

CREATE TRIGGER provjera_datuma_vracanja BEFORE INSERT

OR UPDATE ON posudba FOR EACH ROW EXECUTE

PROCEDURE provjera_datuma_vracanja();

INSERT INTO posudba VALUES (1,1,'2007-

01-10','2007-01-05');

ERROR: Datum vracanja je manji od datuma

posudbe!

DROP TRIGGER provjera_datuma_vracanja ON

posudba;

DROP FUNCTION provjera_datuma_vracanja();

Zadatak 1 Kreirajte funkciju koja ima dva parametra,

prezime i ime autora, te ta dva parametra

sprema u tablicu autora (parametrima se

pristupa pomocu $1 i $2). Nakon toga,

kreirajte transakciju u kojoj se koristi ta

funkcija.

CREATE FUNCTION podaci (varchar, varchar)

RETURNS void AS '

INSERT INTO autor VALUES (default, $1, $2); '

language SQL;

33

Zadatak 2 Korištenjem SELECT INTO naredbe

kreirajte tablicu koja sadrži broj posudbi

prema prezimenima i imenima clanova koji

su posudili knjige. Kreirajte funkciju koja

ima jedan parametar (broj), te ažurirajte

vrijednost atributa posudba u novokreiranoj

tablici tako da vrijednost u svim redovima

povecate za proslijedeni parametar.

Page 21: baze knjiga i prezentac marta.pdf

SELECT prezime, ime, count(*) as broj_pos

INTO Posudbe

FROM clan, posudba

WHERE posudba.clan = clan.sifra

GROUP BY 1, 2;

CREATE FUNCTION azuriraj(integer)

RETURNS void AS '

UPDATE posudbe SET broj_pos=broj_pos + $1;

language SQL;

34

Zadatak 3 Kreirajte funkciju koja vraca najveci broj

posudbi. CREATE FUNCTION clan_pos() RETURNS bigint AS '

SELECT broj_pos FROM posudbe

ORDER BY broj_pos DESC LIMIT 1;

' language SQL;

SELECT clan_pos();

35

Zadatak 4 • Kreirajte funkciju koja za danog autora (ime

i prezime autora) vraca broj knjiga koje je

taj autor napisao. 36

Zadatak 4 - rješenje CREATE FUNCTION br_knjiga (varchar, varchar)

RETURNS bigint AS '

SELECT count(*) FROM autor, autor_knjige

WHERE autor.sifra = autor_knjige.autor AND

autor.prezime= $1 AND autor.ime = $2

GROUP BY autor.prezime, autor.ime;'

LANGUAGE SQL;

Page 22: baze knjiga i prezentac marta.pdf

1. Koja naredba u PostgreSQL-u omogudava brisanje kreiranih indeka (dvije ključne riječi)?

DROP INDEX

2. Prilikom davanja prava nad nekom tablicom određenom korisniku u PostgreSQL-u taj korisnik ni

pod kojim uvjetom ne može ta prava dati drugim korisnicima.

NETOČNO

3. Koja se to klučna riječ koristi prilikom kreiranja upita, a koja nam omogudava specificiranje

tablice (tablica) iz koje (kojih) se dohvadaju podaci ?

FROM

4. Prilikom kreiranja upita koja ključna riječ nam omogudava da provjerimo da je vrijednost nekog

atributa u skupu vrijednosti koje nam vrada pod-upit ?

WHERE EXISTS

5. Naredbom ALTER TABLE nije mogude promjeniti tip podatka određenog atributa.

NETOČNO.

6. Prilikom kreiranja tablice definicija atributa mora obavezno sadržavati:

IME ATRIBUTA I TIP PODATKA

7. Da bi slogove u upitu grupirali koristimo klauzulu

GROUP BY

8. Kad oduzimamo prava (npr. Korištenje tablice) nekom korisniku, ispred korisničkog imena kojem

oduzimamo ovlasti dolazi koja ključna riječ ?

FROM, a kada dodajemo stoji ključna riješ TO.

9. Naredba UPDATE služi dodavanju novih vrijednosti u tablicu.

NETOČNO, služi za ažuriranje postojedih vrijednosti u tablici.

10. SQL je za krajnjeg korisnika proceduralan jezik.

NETOČNO, one je proceduralan jezik za korisnika.

11. Koja ključna riječ omogudava spajanje dva upita i dohvat onih slogova koji se nalaze u prvom

upitu i ne nalaze se u drugom?

EXCEPT ili MINUS.

12. Naredbom UPDATE mogude je

AŽURIRATI VIŠE SLOGOVA, odjednom!

13. Funkcija kreirana u PostgreSQL-u mora uvijek vradati neku vrijednost.

TOČNO, ona mora vratiti neku vrijednost!

Page 23: baze knjiga i prezentac marta.pdf

14. NULL znak odgovara nuli odnosno praznini.

Točno. ???

15.Prilikom kreiranja upita i uspoređivanja vrijednosti određenog atributa sa unaprijed definiranim

predloškom u PostgreSQL-u, koji „posebni“ znak nam zamjenjuje jedan znak ?

_ (underscore), a više znakova zamjenjuje % (postotak)

16. Prilikom dodavanja novih slogova u tablicu uvijek je potrebno navesti imena atributa u koje

želimo spremiti vrijednost koje unosimo.

TOČNO!

17. Koja se ključna riječ koristi prilikom kreiranja upita, a koja nam omogudava specificiranje uvjeta

koje slogovi u odgovoru moraju zadovoljavati ?

WHERE .

18. U PostgreSQL-u ne postoji mogudnost da povežemo dva upita s istim brojem atributa (i tipom

podatka) u odgovoru.

NETOČNO, to možemo napraviti preko naredbe INTERSECT.

19. Ako korisnik eksplicitno ne navede najmanju i najvedu vrijednost sekvence u PostgreSQL-u, one

su zadane automatski.

TOČNO!

20. Korisnički definirane funkcije mogu biti napisane samo u SQL-u.

TOČNO!

21. Koja ključna riječ u PostgreSQL-u prilikom kreiranja tablice omogudava da se tablica kreira na

temelju neke ved postojede tablice, s time da među njima (nakon kreiranja nove tablice) ne postoji

nikakva veza?

LIKE INTO

22. Koja ključna riječ prilikom kreiranja upita (koji sadrži pod-upit) provjerava da li pod-uvijet vrada

slogove ili ne?

EXISTS IN

23. Naredba SELECT služi isključivo dohvatu podataka i ne može se koristiti za ništa drugo.

NETOČNO.

24.Naredbom ALTER TABLE u tablicu nije mogude dodati tablično ograničenje.

NETOČNO.

25.Koja naredba omogudava brisanje sekvence u PostgreSQL-u? (dvije ključne riječi)

DROP SEQUENCE;

Page 24: baze knjiga i prezentac marta.pdf

26. Koja naredba omogudava unos novih vrijednosti u tablicu?

INSERT

27. Koliko je ukupno pravila definirao autor relacijskog modela, a koja omogudavaju utvrđivanje da

li se radi o relacijskom sustavu ili ne ?

12 (sa nultim 13)

28.Da bi pohranili datum i vrijeme u PostgreSQL-u koristimo koji tip podatka?

DATETIME

29. Svako ograničenje nad atributom mora imati ime.

NETOČNO.

30. Da bi rezultat upita bio posložen abecednim redom, koristimo klauzulu

ORDER BY

1. Što od entiteta,veza i atributa se najčešde ne nalazi na era dijagramu?

atributi

2. Brisanje objekta o kojem ovise neki drugi objekti nije mogude? T ili N?

točno

3. Prilikom zadavanja upita sam rezultat upita mogude je sortirati samo po jednom atributu. T ili N?

netočno

4. Prilikom kreiranja upita i uspoređivanja vrijednosti određenog atributa sa unaprijed definiranim

predloškom u PostgreSQLu, koji „posebni“ znak nam zamjenjuje jedan znak?

_

5. Ako prilikom zadavanja nekog upita u odgovoru (umjesto originalnog imena atributa) želimo da

se ispiše neko drugo ime , koristim koju riječ?

As

6. Koja ključna riječ omoguduje implementaciju vanjskog ključa ,tj. Da se vrijednost referencira na

neku drugu vrijednost (ograničenje na razini atributa)?

REFERENCES.

7. Prilikom kreiranja upita u psql-u koju ključnu riječ koristimo da ograničimo broj slogova u

odgovoru?

limit

8. koja naredba omogudava unos slogova u tablicu? (jedna riječ)

insert

Page 25: baze knjiga i prezentac marta.pdf

9. koja funkcija nam omoguduje da vrijednost sekvence u sqlu postavimo na neku novu vrijednost

(jedna riječ)

setval

10. prilikom brisanja objekta, koju je ključnu riječ potrebno dodati naredbi za brisanje pa da bi se

tim objektom izbrisali i svi (drugi) s njime povezani objekti?

from

11. koja naredba ne spada u naredbe dml-a? Drop,delete,insert,update?

drop

12. koja ključna riječ omoguduje da se iz odgovora na postavljeni upit isključe grupe koje ne

zadovoljavaju navedeni uvjet?

except

13. koja je to ključna riječ koja se navodi kod kreiranja objekata , a koja nam omoguduje da kreirani

objekt bude „privremenog“ karaktera?

temp

14. što od navedenog ne spada direktno u relacijski model? Relacijska shema,relacija,entitet, slog

slog, mislim…

1. Definirajmo SQL upit koji vrada sve one nazive knjiga koje imaju definirani ISBN:

SELECT naziv

FROM knjiga

WHERE isbn X;

X = IS NOT NULL

2. Kreirajte funkciju „broj“ koja za danog autora (funkcija prima prezime autora kao prvi argument

i ime kao drugi) vrada broj knjiga koje je taj autor napisao.

CREATE FUNCTION X1 (varchar, X2) RETURNS X3 AS X4

SELECT count(*) from autor, autor_knjige

WHERE autor.sifra=autor_knjige.autor AND autor.prezime = X5 AND autor.ime = X6

GROUP BY autor.prezime,autor.ime

LANGUAGE X7;

X3 = BIGINT

Page 26: baze knjiga i prezentac marta.pdf

3. Recimo da treba dodati imenovano ograničenje na razini tablice kojim kolona „sifra“ postaje

primarni ključ. Što treba upisati umjesto x kako bi naredba bila ispravna?

ALTER TABLE temp ADD x pk1 PRIMARY KEY (sifra);

X = CONSTRAINT

4. Sustav za upravljanje bazama podataka MS Access ne podržava naredbu GRANT.

NETOČNO

5. Što od navedenog je točno?

GRANT TO PUBLIC SELECT ON autor;

GRANT autor ON SELECT TO PUBLIC;

GRANT PUBLIC ON SELECT TO autor;

GRANT SELECT ON autor TO PUBLIC; <--- TOCNO

6. Kreirajte tablicu „osobe“ u koju de biti umetnuti svi članovi i autori koji postoje u bazi (njihova

prezimena i imena). Što treba dodati u upit kako bi on bio ispravan (umjesto x dolazi što) ?

SELCT prezime, ime

X

FROM autor

UNION

SELECT prezime,ime FROM clan;

X = INTO osobe

7. Kreirajte pogled na temelju upita kojim se vrada broj posudbi prema datumu posudbe, ali samo

ako je broj posudbi prema datumu posudbe minimalno 2. Što nedostaje u sljededem pogledu kako

bi on bio ispravan (umjesto X dolazi što) ?

CREATE VIEW pos2 AS

SELECT datum_posudbe,count(*)

FROM posudba

GROUP BY x

HAVING count(*)>1;

X = datum_posudbe

(ili 1)

8. Promjenite strukturu tablice izdavac i dodajte atribut adresa text.

ALTER TABLE izdavac ADD COLUMN adresa text;

Page 27: baze knjiga i prezentac marta.pdf

9. Dajte svima pravo brisanja iz tablice izdavac (dobivene ovlasti ne mogu se dalje davati).

GRANT DELETE ON izdavac TO PUBLIC;

10. Kreirajte funkciju „broj“ koja za danog autora (funkcija prima prezime autora kao prvi

argument i ime kao drugi) vrada broj knjiga koje je autor napisao.

CREATE FUNCTION X1 (varchar,X2) returns X3 AS X4

SELECT count(*) from autor,autor_knjige

WHERE autor.sifra=autor_knjige.autor AND autor.prezime=X5 AND autor.ime=X6

GROUP BY autor.prezime,autor.ime

Language X7;

X5 = $1

11. Dodajte dva člana u tablicu članova. Kreirajte upit koji vrada prezimena clanova koji nisu

posudili niti jednu knjigu (operator in).

INSERT INTO clan(prezime,ime) values('Ivic','Ivo');

INSERT INTO clan(prezime,ime) values('Anic','Ana');

SELECT prezime,sifra FROM clan WHERE sifra IN (SELECT clan FROM posudba);

12. Započnite transakciju koja može samo čitati podatke, s time da može vidjeti podatke neke

druge transakcije koja je u međuvremenu završila s izvršavanjem.

BEGIN ISOLATION LEVEL SERIALIZABLE READ ONLY;

13. Neka je kreirana tablica “filmovi”, s tim da postoji atribut “trajanje” koji označava trajanje filma

u minutama. Kreirajte upit koji vrada prosječno trajanje svih filmova iz tablice filmovi.

SELECT AVG(trajanje) FROM filmovi;

14. Kod BNF notacije uglate zagrade označavaju opcionalnost.

TOČNO

15. Kreirajte funkciju „broj“ koja za danog autora (funkcija prima prezime autora kao prvi

argument i ime kao drugi) vrada broj knjiga koje je autor napisao.

CREATE FUNCTION X1 (varchar,X2) returns X3 AS X4

SELECT count(*) from autor,autor_knjige

WHERE autor.sifra=autor_knjige.autor AND autor.prezime=X5 AND autor.ime=X6

GROUP BY autor.prezime, autor.ime;

Page 28: baze knjiga i prezentac marta.pdf

Language X7;

X7 = SQL

Kreirajte funkciju „broj“ koja za danog autora (funkcija prima prezime autora kao prvi argument i

ime kao drugi) vrada broj knjiga koje je taj autor napisao.

CREATE FUNCTION X1 (varchar, X2) RETURNS X3 AS X4

SELECT count(*) from autor, autor_knjige

WHERE autor.sifra=autor_knjige.autor AND autor.prezime = X5 AND autor.ime = X6

GROUP BY autor.prezime,autor.ime

LANGUAGE X7;

x1= broj, x2= (50) , x3= BIGINT , x4= ' , x5= $1 , x6= $2, x7= SQL ,

1. Kreiraj tablicu dobavljaci sa atributima sifra (cjelobrojana vrijednost raste automatski

primarni kljuc, imenovano ogranicenje na razini reda) i naziv tekst duljine 30

CREATE TABLE dobavljaci (sifra SERIAL CONSTRAINT pk_dob PRIMARY

KEY,naziv VARCHAR (30));

2. Unesi redove u tablicu koristeci dvije varijante naredbe insert

INSERT INTO dobavljaci VALUES (default, 'dobavljac1'), (default, 'dobavljac2');

INSERT INTO dobavljaci (naziv) VALUES ('dobavljac3'), ('dobavljac4');

3. Kreiraj tablicu artikli sa atributima sifra ( tekst duljine 13 primarni kljuc), naziv i

dobavljac (vanjski kljuc referencira se na sifru dobavljaca iz tablice dobavljaci) i

popuni tablicu, da neki artikli nemaju dobavljaca a neki dobavljaci ne dostavljaju ni

jedan artikl sa dvije varijante naredbe insert

CREATE TABLE dobavljaci (sifra SERIAL CONSTRAINT pk_dob PRIMARY

KEY,naziv VARCHAR (30));

INSERT INTO artikli VALUES (1, 'artikl1', 1);

INSERT INTO artikli VALUES (2, 'artikl1',NULL);

INSERT INTO artikli (sifra, naziv) values (3,'artikl3');

INSERT INTO artikli VALUES (4, 'artikl4',3);

4. Daj svima pravo citanja i brisanja nad artiklima

GRANT SELECT, DELETE ON artikli TO PUBLIC

5. Kreiraj indeks nad atributom dobavljac u tablici artikli

CREATE INDEX indx_dob ON artikli (dobavljac);

6. Kreiraj novu tablicu koja je popunjena redcima koje vraca upit koji vraca sve artikle i

dobavljace bez obzira dali dobavljaci imaju artikl ili artikl ima dobvljaca

CREATE TABLE nova_tablica AS SELECT artikli.naziv AS artikl, dobavljaci.naziv AS

dobavljac FROM artikli FULL JOIN dobavljaci ON artikli.dobavljac = dobavljaci.sifra;

Page 29: baze knjiga i prezentac marta.pdf

7. Kreiraj upit koji vraca broj artikala koje dobavlja dobavljac (koristi JOIN USING i

preimenovanje po potrebi)

SELECT naziv,podupit.broj_artikala FROM dobavljaci JOIN (SELECT dobavljac AS sifra,

COUNT (*) AS broj_artikala FROM artikli GROUP BY 1) podupit USING (sifra);

(Ovaj ne ispisuje 0 za dobavljace koji ne dostavljaju ni jedan artikl, donji ispisuje )

Moze i na jednostavniji nacin

SELECT naziv, (SELECT COUNT (*) FROM artikli WHERE artikli.dobavljac =

dobavljaci.sifra) FROM dobavljaci;

Ovaj nacin bi isto priznao jer niko nije znao rijesiti sa USING JOIN

8. Kreiraj funkciju koja za ime dobavljaca vraca broj artikala koje dostavlja

CREATE OR REPLACE FUNCTION funkcija1 (varchar) RETURNS BIGINT AS 'SELECT

COUNT (*) FROM artikli, dobavljaci WHERE artikli.dobavljac = dobavljaci.sifra AND

dobavljaci.naziv = $1;' LANGUAGE SQL;

VJEŽBA 9 - RJEŠENJA

1. Nazive filmova sortirane uzlazno po abecedi

select * from film order by naslov desc;

2. Nazive filmova koji su izdani poslije 2000 sortirano po abecedi

select naslov from film where godina>2000 order by naslov;

3. Prosječno trajanje svih filmova,

select avg(trajanje) from film;

Page 30: baze knjiga i prezentac marta.pdf

4. Najduže i najkrade vrijeme trajanja nekog filma,

select min(trajanje), max(trajanje) from film;

5. Nazive kompanija za koje adresa nije poznata,

Select naziv from kompanija where adresa is not null;

6. Nazive filmova čiji naslov započinje slovom 'D',

select naslov from film where naslov like 'D%';

7. Naziv(e) kompanije(a) koja nije vlasnike ni jednog filma (sa EXISTS),

select naziv from kompanija where not exists (select * from film where

kompanija.id=film.kompanija);

8. Ukupan broj slogova u tablici kompanija,

select count(*) from kompanija;

9. Broj kompanija za koje je adresa poznata,

select count(*) from kompanija where adresa is not null;

10. Broj filmova prema šifri filmske kompanije,

select kompanija, count(*) from film group by kompanija;

11. Naslov filma i naziv kompanije (za svaki film),

Page 31: baze knjiga i prezentac marta.pdf

select naslov,naziv from film, kompanija where kompanija.id=film.kompanija;

12. Naslov filma, oznaku tipa filma i naziv kompanije (za svaki film),

select naslov, naziv, tip from film, kompanija, tipfilma where film.kompanija=kompanija.id and

film.tip=tipfilma.id;

13. Broj filmova prema nazivu kompanije,

select naziv, count(*) from kompanija, film where kompanija.id=film.kompanija group by naziv;

14. Nazive kompanija koje u vlasništvu imaju barem 3 filma i

select naziv, count(*) from kompanija, film where kompanija.id=film.kompanija group by naziv

having count(*)>3;

15. Nađite sve nazive filmova u vlasništvu dane kompanije X.

select naslov from film, kompanija where kompanija.id=film.kompanija and kompanija.id=X;

ili

select naslov from film where kompanija in (select id from kompanija where naziv='X');

Napravite poglede na temelju upita pod brojem 10, 11 i 14.

Pogled upit10

Page 32: baze knjiga i prezentac marta.pdf

create view upit10 as select kompanija, count(*) from film group by kompanija;

pozivanje: select * from upit10;

Pogled upit11

create view upit11 as select naslov,naziv from film, kompanija where kompanija.id=film.kompanija;

pozivanje: select * from upit11;

Pogled upit14

create view upit14 as select naziv, count(*) from kompanija, film where kompanija.id=film.kompanija

group by naziv having count(*)>3

pozivanje: select * from upit14;

Korištenjem naredbe ALTER TABLE dodajte atribut "telefon" u tablicu kompanija (po defaultu je

vrijednost null). Korištenjem iste naredbe dodajte imenovano ograničenje kojim se traži da

vrijednosti atributa "telefon" budu jedinstvene.

Dodavanje atributa „telefon“:

alter table kompanija add telefon char(9);

Dodavanje imenovanog ograničenja na atribut „telefon“:

alter table kompanija add constraint jedinstven unique(telefon);

Korištenjem SELECT INTO naredbe kreirajte tablicu na temelju upita br. 13

Page 33: baze knjiga i prezentac marta.pdf

select naziv, count(*) as "broj_filmova" into proba from kompanija, film where

kompanija.id=film.kompanija group by naziv;

Kreirajte funkciju koja ima jedan argument (broj filmova), i koja briše iz novokreirane tablice one

kompanije koje imaju manje filmova od proslijeđenog argumenta

create function azuriraj(integer) returns void as 'delete from proba where broj_filmova<$1;' language

sql;

pozivanje funkcije: select azuriraj(ovdje upišete br filmova, npr. ako upišete 2, iz gore kreiranje

tablice pomodu select into izbrisat de se sve one kompanije koje su izdale manje od 2 filma)

Nakon toga, kreirajte upit koji de odrediti nazive kompanija iz tablice kompanija koji su izbrisani

pozivom funkcije (korištenjem presjeka).

Korištenjem razlike:

select naziv from kompanija except select naziv from proba;

Korištenjem presjeka:

select naziv from kompanija where naziv not in (select naziv from kompanija intersect select naziv

from proba);