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)