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

)