H:\INNE\P \06. semestr\Bazy Danych\LABORATORIUM\2010-04-22\145406_2010-04-22.sql 1
-------------------JOINY
use db145406
go
/*
czenie tabeli pracownicy i dzia y*/
select imie, nazwisko,p.dzialid , nazwa from pracownicy p inner join dzialy d on d.dzialID= p.dzialID
select * from zarobki
/*LEFT join*/
select imie, nazwisko,p.dzialid , nazwa from pracownicy p left join dzialy d on d.dzialID= p.dzialID
select * from dzialy
insert into dzialy(nazwa) values ('Dyrekcja'); select imie, nazwisko,p.dzialid , nazwa from pracownicy p right join dzialy d on d.dzialID= p.dzialID
/*ilo
pracowników oraz rednia wieku*/
select d.dzialID, nazwa, count(pracID) "liczbaP", AVG(wiek) " rednai wieku" from pracownicy p
join dzialy d on p.dzialid=d.dzialID
group by d.dzialID, nazwa /*w group by musi by wszystko co w select z pomini ciem funkcji grupuj cych*/
/* rednie zarobki w dziale*/
select d.dzialID, nazwa, AVG(brutto) " redni zarobek" from pracownicy p join dzialy d on d.dzialID=p.pracID
join zarobki z on z.pracID=p.pracID /*tworz niejako tabel */
group by d.dzialID, nazwa
/*dzia z minimaln
redni zarobku*/
select nazwa, AVG(brutto) srednia_zarobkow from pracownicy p join dzialy d on d.dzialID=p.pracID
join zarobki z on z.pracID=p.pracID /*tworz niejako tabel */
group by d.dzialID, nazwa
having AVG(brutto) = ( /*having zawsze po group by!!!!
porównuje obliczon warto
redniej z minimaln obliczon poni ej*
/
select MIN(srednia_zarobkow) minimum from(
/*tworzy tabel ze rednimi zarobkami w ka dych dzia ach*/
select d.dzialID, nazwa, AVG(brutto) srednia_zarobkow from pracownicy p join dzialy d on d.dzialID=p.pracID
join zarobki z on z.pracID=p.pracID /*tworz niejako tabel */
group by d.dzialID, nazwa
) as srednia
)
/* dzia y i rednie zarobki w dzia ach, bior c pod uweag osoby zarabiaj ce >2500 */
select d.nazwa dzial, AVG(z.brutto) srednia from dzialy as d join pracownicy as p on p.dzialID=d.dzialID
join zarobki z on p.pracID=z.pracID /*tworz niejako tabel */
where z.brutto > 2500
group by d.dzialID, nazwa
having AVG(z.brutto) >5000
/* Dzia , gdzie rednia wieku jest najwy sza Dzia anie:
1. Wybiera list
rednich wieków
2. Z listy rednich wieków/dzia wybiera max warto 3. Porównuje (having) z maksymaln warto ci */
select nazwa, AVG(wiek) sredni_wiek from pracownicy p
H:\INNE\P \06. semestr\Bazy Danych\LABORATORIUM\2010-04-22\145406_2010-04-22.sql 2
join dzialy d on p.dzialID=d.dzialID
group by d.dzialID, nazwa
having AVG(wiek)=
(
/*to zapytanie wybiera maksymalny wiek*/
select MAX(sredni_wiek) from
(
/*to zapytanie wy wietli list ze rednimi wiekami*/
select AVG(wiek) sredni_wiek from pracownicy p join dzialy d on p.dzialID=d.dzialID
group by d.dzialID /*grupuje wg dzialu,ale nie wy wietla dzia u, bo nie ma dzia u w SELECT*/
) as pod_wiek
)