H:\INNE\P \06. semestr\Bazy Danych\LABORATORIUM\Od_Damiana\Flisu.zajecia3.sql 1

/*wybierz dzialy oraz srednie zarobki w tych dzialach bior c pod uwag jedynie osoby zarabiaj ce powy ej 2500*/

select nazwa, avg(brutto) srednio from dzialy d join pracownicy p on d.dzialID = p.dzialID

join zarobki z

on p.pracID = z.pracID

where z.brutto > 2500

group by d.dzialID, nazwa

--having AVG(brutto)>5000;

/*wska dodatkowo tylko te dzia y które maj redni powyzej 5000*/

--wybra dzia gdzie rednia wieku jest najwy sza select top 1 d.dzialID, nazwa, AVG(wiek) srednia_wieku from dzialy d join pracownicy p on d.dzialID = p.dzialID

group by d.dzialid, nazwa

order by AVG(wiek) desc;

select d.nazwa, AVG(p.wiek) from dzialy d join pracownicy p on d.dzialID = p.dzialID

group by d.dzialid,d.nazwa

having AVG(p.wiek)=

(

select max(wiek) from

(

select AVG(p.wiek) wiek from dzialy d join pracownicy p on d.dzialID = p.dzialID

group by d.dzialID,d.nazwa

) as max_wiek

)

/*tworzenie modyfikowanie tabeli*/

-- create

-- alter

-- drop

/*edytowanie wpisów*/

-- insert

-- update

-- delete

--dodawanie nowej kolumny

alter table pracownicy add wzrost numeric(3,2); --liczba miejsc przed i po przecinku update pracownicy set wzrost=1.70 where pracID<5; update pracownicy set wzrost=1.80 where pracID in (5,7,9); update pracownicy set wzrost=1.75 where wzrost is null; select * from pracownicy;

alter table pracownicy drop column wzrost; --usuwanie kolumny

--tworzenie nowej tabeli

create table absencje

(

abse_id int identity(1,1) constraint PK_Absencje primary key, --identity - automatyczna inkrementacja,

--ograniczenie klucza g ównego

od datetime not null,

do datetime not null,

typ varchar(15) not null constraint CK_Abse_Typ check(typ in('Zwolnienie','Urlop')),--

ograniczenie typu check,

-- które pozwala wprowadzi

tylko ograniczenia z listy

prac_id int not null constraint FK_Abse_Prac foreign key references Pracownicy(PracID)--

ograniczenie - klucz obcy

)/*constraint - nak ada ograniczenia*/

select * from Absencje

insert into absencje(od,do,typ,prac_id) values('2010-01-01','2010-02-01','Zwolnienie',1); insert into absencje(od,do,typ,prac_id) values('2010-01-01','2010-02-01','Urlop',2);

H:\INNE\P \06. semestr\Bazy Danych\LABORATORIUM\Od_Damiana\Flisu.zajecia3.sql 2

insert into absencje(od,do,typ,prac_id) values('2010-01-01','2010-02-01','poza_check',1); -- CK nie zezwala na wpisanie spoza listy select * from absencje;

--dodaj do tabeli dzia y kolumny aktualny varchar(3) alter table dzialy add aktualny varchar(3); alter table dzialy drop column aktualny; alter table dzialy alter column aktualny varchar(3) NOT NULL; select * from dzialy;

INSERT INTO dzialy VALUES ('Pomocniczy',NULL); update dzialy set aktualny = 'tak'; --ograniczenie 1-znakowe wi c nie mo e by wykonane insert into dzialy (nazwa,aktualny) values('nowy dzial','nie');

--utwórz tabele test (test_id, tekst) int varchar create table test

(

test_id int,

tekst varchar(50)

)

select * from test;

drop table test

alter table test alter column test_id int not null; alter table test add constraint pk_test_id primary key(test_id);

--na

enie klucza obcego na istniej

tabel .

alter table pracownicy add constraint fk_dzial_id foreign key(dzialID) references dzialy (dzialID)

select * from pracownicy;

--zarobki na kolumne pracid nakladamy klucz obcy w pracownicy alter table zarobki add constraint fk_prac_id foreign key(pracID) references pracownicy (pracID)