create database Radnici use Radnici -- 2. -- Kreiraj tabelu Radnici create table Radnici ( id int not null, --kolona ne moze imati NULL vrednosti ime nvarchar(20) not null, prezime nvarchar(20) not null, jmbg char(13) null -- kolona moze imati NULL vrednosti ) -- 3. -- Upisivanje podataka u tabelu insert into Radnici (id, ime, prezime, jmbg) values (1, 'Radisa', 'Radnik', '0101999720000') select * from Radnici -- 4. -- Kolone koje mogu imati null vrednosti se mogu izostaviti u insert komandi insert into Radnici (id, ime, prezime) values (1, 'Radisa', 'Radnik') select * from Radnici -- 5. -- Brisanje kolone id alter table Radnici drop column id select * from Radnici -- Dodavanje kolone u vec postojecu tabelu sa auto incrementom /* IDENTITY [ (seed , increment) ] Argumenti seed Is the value that is used for the very first row loaded into the table. increment Is the incremental value that is added to the identity value of the previous row that was loaded. You must specify both the seed and increment or neither. If neither is specified, the default is (1,1). */ alter table Radnici add id int identity(1,1) -- Kolone imaju osobinu identity se ne mogu insertovati kada je fleg IDENTITY_INSERT setovan na OFF sto je njegova default vrednost insert into Radnici (id, ime, prezime) values (1, 'Radisa', 'Radnik') -- ovaj upit ce baciti gresku insert into Radnici (ime, prezime) values ('Radisa', 'Radnik') -- ispravan upit insert into Radnici (ime, prezime) values ('Mika', 'Radnik1') insert into Radnici (ime, prezime, jmbg) values ('Zika', 'Radnik2', '0000000123456') select * from Radnici -- svi dodati redovi za id imaju automatski dodeljenu vrednost -- 6. -- Dodavanje primarnog kljuca na kolonu id tabele Radnici alter table Radnici add constraint pk_radnici primary key (id) -- 7. create table Angazovanja ( id int not null, id_radnika int not null, id_sektora int not null ) alter table Angazovanja add constraint pk_angazovanja primary key (id) insert into Angazovanja(id, id_radnika, id_sektora) values (11, 10, 2) insert into Angazovanja(id, id_radnika, id_sektora) values (11, 10, 2) -- greska jer id vrednost 11 vec postoji select * from Angazovanja -- 8. -- Sa trenutnim ogranicenjima mozemo insert-ovati proizvoljan id radnika, a to je lose jer bi trebalo da -- mozemo da insertujemo samo one id-eve koji postoje u tabeli radnici select * from Angazovanja select * from Radnici -- Strani kljuc alter table Angazovanja add constraint fk_id_radnika foreign key (id_radnika) references Radnici(id) delete from Angazovanja where id = 11 alter table Angazovanja add constraint fk_id_radnika foreign key (id_radnika) references Radnici(id) insert into Angazovanja(id, id_radnika, id_sektora) values (11, 10, 2) -- radnik sa id-em 10 ne postoji --ispravno select * from Radnici insert into Angazovanja values (1, 4, 4) -- Angazovan je radnik Zika, koji postoji u tabeli Radnici select * from Radnici select * from Angazovanja --9. delete from Angazovanja where 1 = 1 -- izbrisi sve -- 10. insert into Radnici(id, ime, prezime, jmbg) values (50, 'Jovan', 'Jovanovic', null) -- greska, id ima osobinu identity a fleg IDENTITY_INSERT je setovan na OFF SET IDENTITY_INSERT Radnici on -- Omoguci eksplicitno upisivanje podataka i za id insert into Radnici(id, ime, prezime, jmbg) values (50, 'Jovan', 'Jovanovic', null) --Sada moramo da postojuemo jedinstvenost kolone id, tj ne mozemo da upisemo vrednost koja vec postoji select * from Radnici -- 11. SET IDENTITY_INSERT Radnici off -- ONEMOGUCI eksplicitno upisivanje podataka za id insert into Radnici SELECT Imen, Imen, convert(varchar(2),Snast) + '12345678901' FROM studije.dbo.Nastavnici select * from Radnici -- 12. --update update radnici set prezime = 'Nepoznato' where id > 3 select * from Radnici delete from Radnici where prezime != 'Nepoznato' select * from Radnici -- 13. insert into Angazovanja values (22,50, 1) select * from Radnici select * from Angazovanja delete from Radnici where id = 50 -- Ne moze se obrisati jer se id 50 pojavljuje u tabali Angazovanja -- 14. Kaskadno brisanje (ako iz tabele Radnici izbrisemo radnijka sa id-em 50, izbrisace se -- i redovi u svim tabelama sa kojima je on povezan preko svog id-a) alter table Angazovanja drop constraint fk_id_radnika -- Izbrisi staro ogranicenje stranog kljuca alter table Angazovanja add constraint fk_id_radnika -- dodaj novo ogranicenje stranog kljuca foreign key (id_radnika) references Radnici(id) ON delete cascade delete from Radnici where id = 50 select * from Radnici select * from Angazovanja -- 15. -- pocetak while naredbe declare @i int -- deklaracija promenljive tipa int set @i = 1 -- setuj njenu pocetnu vrednost while @i < 10000 -- sve dok je vrednost promenljive i manja od 10000 begin insert into Radnici values (CONCAT(@i, 'mile'), 'neko', null) -- upisi podatke u tabelu Radnici set @i = @i + 1 -- Povecaj vrednost promenljive za 1 end -- kraj while naredbe select count(*) from radnici select * from Radnici where ime = '55mile' -- 16 /* FUNKCIJE */ use STUDIJE -- Kreiranje funkcije create function prosek(@brojInd int, @godUpisan int) returns decimal(6,2) as begin declare @p decimal(6,2) select @p = avg(Ocena * 1.0) from Prijave where Indeks = @brojInd and Upisan = @godUpisan and Ocena > 5 return @p end -- Izvrsavanje funkcije --16.1. select dbo.prosek(2, 2001) --16.2 declare @prosek_studenta decimal(6,2) set @prosek_studenta = dbo.prosek(2,2001) select @prosek_studenta --16.3 select Indeks, Upisan, dbo.prosek(Indeks, Upisan) as 'Prosecna ocena' from Studenti --16.4 select indeks, upisan, imes from Studenti where dbo.prosek(indeks, upisan) > 9.0 -- 17. Funkcija koja vraca tabelu predmeta na smeru create function predmeti_na_smeru(@smer int) returns table as return (select Spred, Semestar from Planst where Ssmer = @smer) go select * from predmeti_na_smeru(1) /* PROCEDURE */ -- 18 Kreirati proceduru za unos nove prijave create procedure unos_nove_prijave(@brInd int, @godUpisa int, @spred int, @snast int) as begin insert into Prijave(Indeks, Upisan, Spred, Snast, Datump) values(@brInd, @godUpisa, @spred, @snast, GETDATE()) end -- * Ne mogu se koristiti u select, having i where delovima -- * Pomocu njih mozemo da radimo insert, update i delete nad podacima -- nacin pozivanja exec unos_nove_prijave 2, 2002, 1, 2 select * from Prijave where Indeks = 2 and Upisan = 2002 --PROVERA -- 19 - Procedure sa vise povratnih tipova create procedure vise_povratnih(@prva int output, @druga int output, @treca int) as begin set @prva = @treca - 2 set @druga = @treca - 1 end -- I poziv bez 'output' - vrednosti @izlaz_prva, @izlaz_druga ce biti null declare @izlaz_prva int declare @izlaz_druga int exec vise_povratnih @prva=@izlaz_prva , @druga = @izlaz_druga , @treca = 5 select @izlaz_prva, @izlaz_druga -- II poziv - sa 'output' - vrednosti @izlaz_prva, @izlaz_druga ce biti 3 i 4 declare @izlaz_prva int declare @izlaz_druga int exec vise_povratnih @prva=@izlaz_prva output, @druga = @izlaz_druga output, @treca = 5 select @izlaz_prva, @izlaz_druga