Dzień 2

</pre>
select * from zawodnicy

select distinct kraj from zawodnicy

select distinct kraj, waga from zawodnicy

-- grupowanie

select kraj ,waga
from zawodnicy
group by kraj

--1) jeżeli w grupowaniu chcę wyświetlić kolumnę x to
-- ta kolumna musi być umieszczona w sekcji group by
-- lub musi być zagregowana

--agregacja danych to scalenie wielu wartości w jedną:
--np z zastosowaniem funkcji: suma, średnia, odchylenie standardowe,zliczenie
-- str 20
select kraj ,sum(waga) suma, max(waga),min(waga),count(waga)
from zawodnicy
group by kraj

select sum(waga),count(wzrost) from zawodnicy

select kraj, count(wzrost),count(waga),count(imie),count(id_trenera)
from zawodnicy
group by kraj

select * from zawodnicy

select kraj, count(*)
from zawodnicy
group by kraj

select kraj, count(*), count(id_zawodnika)
from zawodnicy
group by kraj

select kraj, max(wzrost)
from zawodnicy
group by kraj

select kraj, count(*)
from zawodnicy
where wzrost>180
group by kraj

select kraj, avg(wzrost) sr
from zawodnicy
group by kraj
order by sr

select
from
where
group by
order by

select kraj
from zawodnicy
group by kraj

select kraj, sum(iif(wzrost>180,1,0)) wys ,sum(iif(wzrost<175,1,0)) nis
from zawodnicy
group by kraj

select kraj, count(iif(wzrost>180,1,null)) wys ,count(iif(wzrost<175,1,null)) nis
from zawodnicy
group by kraj

select kraj, avg(wzrost)
from zawodnicy
group by kraj
having avg(wzrost)>=180

-- str 20 cw 43

select kraj ,sum(iif(wzrost>180,1,0))
from zawodnicy
group by kraj
having sum(iif(wzrost>180,1,0))>1

select kraj,count(*)
from zawodnicy
where wzrost>180
group by kraj
having count(*)>1

-- dla kazdego zawodnika wypisz nazwę miesiąca w jakim się urodził
-- następnie pogrupuj dane wg kraju i nazwy miesiąca

select kraj, format(data_ur,'MMMM','pl-pl'),count(*)
from zawodnicy
group by kraj,format(data_ur,'MMMM','pl-pl')

select kraj, format(data_ur,'MMMM','pl-pl'), count(*)
from zawodnicy
group by rollup (kraj,format(data_ur,'MMMM','pl-pl'))

select kraj, sum(waga)
from zawodnicy
group by kraj

select sum(waga) from zawodnicy

select kraj, avg(waga)
from zawodnicy
group by rollup(kraj)

select kraj, sum(waga)
from zawodnicy
group by cube(kraj)

select kraj, format(data_ur,'MMMM','pl-pl'), count(*)
from zawodnicy
group by cube (kraj,format(data_ur,'MMMM','pl-pl'))

-- podzapytania
select imie, waga from zawodnicy

select kraj,waga, imie
from
(select kraj, waga, wzrost
from zawodnicy) t

select kraj,waga, imie
from
(select kraj, waga, wzrost
from zawodnicy) t

select kraj
from
(select kraj,waga
from
(select kraj,waga,wzrost
from zawodnicy) t) k

select imie , w
from
(select imie, waga+1 w
from zawodnicy) t
where w>60
--group by
--having
--order by

select imie, nazwisko , format(waga/power(wzrost/100.0,2),'0.00') bmi
from zawodnicy
where format(waga/power(wzrost/100.0,2),'0.00')>20

select imie,nazwisko,format(bmi,'0.00') bmi
from
(select imie, nazwisko , waga/power(wzrost/100.0,2) bmi
from zawodnicy) t
where bmi>20

-- str 20 zad 43
-- bez having

select kraj, sr
from
(select kraj, avg(wzrost) sr
from zawodnicy
group by kraj) t
where sr>=180

select kraj ,ile
from
(select kraj, count(*) ile
from zawodnicy
where wzrost>180
group by kraj) t
where ile>1

select iif(kraj is null,'total',kraj),sr
from
(select kraj, avg(wzrost) sr
from zawodnicy
group by rollup(kraj)) t

-- podzapytania:
-- w sekcji from TRZEBA aliasować
-- w sekcji select MOZNA ale nie trzeba aliasowac
-- w sekcji where NIE MOZNA aliasowac

select kraj, (select avg(wzrost) from zawodnicy ) t
from zawodnicy

-- dla kazdego zawodnika wypisz kraj i średni wzrost z JEGO kraju

select kraj, (select avg(wzrost) from zawodnicy where kraj=zawodnicy.kraj ) t
from zawodnicy

select kraj, imie, nazwisko, (select avg(wzrost) from zawodnicy where kraj=z.kraj ) [średnia kraju]
from zawodnicy z
-- podzapytanie skorelowane

select kraj, avg(wzrost)
from zawodnicy
group by kraj

-- dla każdego zawodnika (imie, nazwisko, wzrost) wypisz jeszcze o ile cm jest on niższy
-- od najwyższego zawodnika z jego kraju

select imie,nazwisko,[max z kraju]-wzrost roznica
from
(select imie, nazwisko,wzrost,
(select max(wzrost)
from zawodnicy
where kraj =z.kraj) [max z kraju]
from zawodnicy z) t
where [max z kraju]-wzrost >0

select imie, nazwisko, roznica
from
(select imie,nazwisko,[max z kraju]-wzrost roznica
from
(select imie, nazwisko,wzrost,
(select max(wzrost)
from zawodnicy
where kraj =z.kraj) [max z kraju]
from zawodnicy z) t) k
where roznica>0

-- podzapytania w sekcji where

select imie, nazwisko,waga
from zawodnicy
where waga > 56

-- wypisz tylko zawodnikow, ktorzy wiecej ważą od sredniej wagi ze wszystkich zawodnikow

-- w podzapytania w sekcji where nie można aliasować

select imie, nazwisko, waga, (select avg(waga) from zawodnicy) sr
from zawodnicy
where waga > (select avg(waga) from zawodnicy)

-- wypisz tylko zawodnikow, ktorych waga jest wieksza od sredniej z jego kraju
-- podzapytanie skorelowane

select imie, nazwisko, waga, (select avg(waga) from zawodnicy) sr
from zawodnicy z
where waga > (select avg(waga) from zawodnicy where kraj=z.kraj)

select imie, nazwisko ,kraj
from zawodnicy
where wzrost in (175,167,168)

-- wypisz tylko zawodnikow, ktorych wzrost jest taki sam jak wzrost polakow

select imie, nazwisko ,kraj
from zawodnicy
where waga in (select waga from zawodnicy where kraj = 'pol')

select imie, nazwisko ,kraj
from zawodnicy
where waga >all (select waga from zawodnicy where kraj = 'pol')

select imie, nazwisko ,kraj
from zawodnicy
where waga > (select max(waga) from zawodnicy where kraj = 'pol')

select imie, nazwisko ,kraj
from zawodnicy
where waga >any (select waga from zawodnicy where kraj = 'pol')

select imie, nazwisko ,kraj
from zawodnicy
where waga >some (select waga from zawodnicy where kraj = 'pol')

select imie, nazwisko ,kraj
from zawodnicy
where waga > (select min(waga) from zawodnicy where kraj = 'pol')

select imie, nazwisko ,kraj
from zawodnicy
where waga between 50 and (select max(waga) from zawodnicy where kraj='pol')

-- wypisz zawodnikow, ktorzy urodzili w miesiącu późniejszym niż
-- miesiąc urodzenia najcięższego niemca ale wcześniej niż miesiąc najmłodszego polaka

select month(data_ur)
from zawodnicy
where data_ur= (select max(data_ur) from zawodnicy where kraj='pol')

select MONTH(data_ur)
from zawodnicy
where waga=(select max(waga) from zawodnicy where kraj = 'ger')

select imie, nazwisko
from zawodnicy
where MONTH(data_ur) between
(select MONTH(data_ur)
from zawodnicy
where waga=(select max(waga) from zawodnicy where kraj = 'ger'))
and
(select month(data_ur)
from zawodnicy
where data_ur= (select max(data_ur) from zawodnicy where kraj='pol')
)

select * from zawodnicy
select * from trenerzy

select imie,nazwisko,imie_t,nazwisko_t, zawodnicy.id_trenera
from zawodnicy left join trenerzy on
zawodnicy.id_trenera=trenerzy.id_trenera

select imie,nazwisko,imie_t,nazwisko_t, zawodnicy.id_trenera
from zawodnicy right join trenerzy on
zawodnicy.id_trenera=trenerzy.id_trenera

select imie,nazwisko,imie_t,nazwisko_t, zawodnicy.id_trenera
from zawodnicy join trenerzy on
zawodnicy.id_trenera=trenerzy.id_trenera

select imie,nazwisko,imie_t,nazwisko_t, zawodnicy.id_trenera
from zawodnicy full join trenerzy on
zawodnicy.id_trenera=trenerzy.id_trenera

select z.imie,z.nazwisko,t.imie_t,t.nazwisko_t, z.id_trenera
from zawodnicy z left join trenerzy t on
z.id_trenera=t.id_trenera

select z.imie, t.imie_t, z.id_trenera,t.id_trenera
from zawodnicy z, trenerzy t
where z.id_trenera = t.id_trenera


select z.imie, t.imie_t, z.id_trenera,t.id_trenera
from zawodnicy z, trenerzy t , skocznie

select z.imie, t.imie_t, z.id_trenera,t.id_trenera
from (zawodnicy z cross join trenerzy t)
cross join skocznie

-- wypisz wszystkie nazwy skoczni wraz z nazwami miast gdzie się znajdują
select s.*, m.nazwa_miasta
from skocznie s left join miasta m on s.id_miasta=m.id_miasta
-- wypisz pary trener-zawodnik urodzonych tego samego miesiąca ale
-- niekoniecznie, że jeden trenuje drugiego
select *
from zawodnicy z join trenerzy t on MONTH(z.data_ur)=MONTH(t.data_ur_t)
-- wypisz pary-trener zawodnik urodzonych tego samego miesiaca i
-- zachowując relację, żę jeden trenuje drugiego
select *
from zawodnicy z join trenerzy t on MONTH(z.data_ur)=MONTH(t.data_ur_t)
and z.id_trenera = t.id_trenera
-- wypisz pary zawodników (zawodnik-zawodnik) takie, że długość liter imienia
-- jest taka sama. Usun wytąpienia samego ze sobą np: Malysz-Malysz
select z1.imie, z2.imie
from zawodnicy z1 join zawodnicy z2 on len(z1.imie)=len(z2.imie)
and z1.imie<>z2.imie

-- wypisz pary zawodnik-skocznia z tego samego kraju
select *
from zawodnicy z join skocznie s on z.kraj = s.kraj_skoczni
-- wypisz pary zawodnikow urodzonych tego samego dnia tygodnia i z tego samego kraju

select *
from zawodnicy z1 join zawodnicy z2 on
day(z1.data_ur) = day(z2.data_ur) and z1.kraj = z2.kraj
and z1.nazwisko <> z2.nazwisko

-- wypisz nazwy zawodów wraz z miastami gdzie się znajdywały te skocznie

select m.nazwa_miasta, z.nazwa
from zawody z left join skocznie s on z.id_skoczni=s.id_skoczni
left join miasta m on m.id_miasta = s.id_miasta

-- 1)wypisz nazwy skoczkow wraz z nazwami zawodow w jakich startowali
select z.imie + ' ' + z.nazwisko, zw.nazwa
from zawodnicy z left join uczestnictwa u on z.id_zawodnika=u.id_zawodnika
left join zawody zw on zw.id_zawodow=u.id_zawodow

-- 2)wypisz nazwy trenerów wraz z nazwami miast jakie musieli odwiedzić w swojej karierze
select distinct t.nazwisko_t , m.nazwa_miasta
from trenerzy t left join zawodnicy z on z.id_trenera=t.id_trenera
left join uczestnictwa u on u.id_zawodnika=z.id_zawodnika
left join zawody w on w.id_zawodow = u.id_zawodow
left join skocznie s on s.id_skoczni = w.id_skoczni
left join miasta m on m.id_miasta = s.id_miasta
-- 3)wypisz trenerow wraz z informacja ilu zawodnikow trenuje
select t.nazwisko_t, COUNT(z.id_zawodnika)
from trenerzy t left join zawodnicy z on z.id_trenera=t.id_trenera
group by t.nazwisko_t
order by 2
-- 4)wypisz zawodnikow wraz z informacją ile razy startowali w zawodach
select z.nazwisko, count(z.nazwisko), count(w.id_zawodow)
from zawodnicy z left join uczestnictwa u on z.id_zawodnika=u.id_zawodnika
left join zawody w on w.id_zawodow=u.id_zawodow
group by z.nazwisko

select z.nazwisko, count(z.nazwisko), count(u.id_zawodow)
from zawodnicy z left join uczestnictwa u on z.id_zawodnika=u.id_zawodnika
group by z.nazwisko

-- 5)wypisz wszystkie (12) nazwy miesiecy i napisz ile osób urodziło się w danym miesiacu
select t.nazwaMiesiaca,coalesce(k.liczbaZawodnikow,0) -- iif(k.liczbaZawodnikow is null,0,k.liczbaZawodnikow)
from
(select FORMAT(DATEFROMPARTS(2000,id_zawodnika,1),'MMMM','pl-pl') nazwaMiesiaca
from zawodnicy
where id_zawodnika<13) t
left join
(select MONTH(data_ur) numerMiesiaca, COUNT(*) liczbaZawodnikow
from zawodnicy
group by MONTH(data_ur)) k on t.nazwaMiesiaca=FORMAT(DATEFROMPARTS(2000,k.numerMiesiaca,1),'MMMM','pl-pl')
-- 6)w którym mieście skakało najwięcej zawodników?
select top 1 m.nazwa_miasta, COUNT(u.id_zawodnika) ileStartow
from uczestnictwa u left join zawody z on z.id_zawodow=u.id_zawodow
left join skocznie s on s.id_skoczni=z.id_skoczni
left join miasta m on m.id_miasta = s.id_miasta
group by m.nazwa_miasta
order by ileStartow desc
-- 7) wypisz zawodnikow ciezszych niz srednia ze swojego kraju
select imie, nazwisko, z.kraj, t.sr
from zawodnicy z
left join
(select kraj, AVG(waga) sr
from zawodnicy
group by kraj) t on z.kraj=t.kraj
where z.waga>t.sr
-- 8) wypisz wszystkich zawodnikow, ktorych wzrost jest drugi co do wielkosci
select imie, nazwisko, wzrost from zawodnicy order by wzrost desc

select imie, nazwisko , wzrost from zawodnicy
where wzrost =
(select max(wzrost) from zawodnicy
where wzrost < (select MAX(wzrost) from zawodnicy))

SELECT {distinct} [podzapytania]
FROM {join...} [podzapytania]
WHERE [podzapytania]
GROUP BY
HAVING
ORDER BY

-- operacje teoriomnogosciowe
go

select imie, nazwisko , waga
from zawodnicy
union
select imie_t, nazwisko_t, 0
from trenerzy

select AVG(wzrost), AVG(waga) from zawodnicy

select imie, nazwisko, kraj , wzrost, waga
from zawodnicy where wzrost > 178
union all
select imie,nazwisko,kraj, wzrost, waga
from zawodnicy where waga > 61

select imie, nazwisko, kraj , wzrost, waga
from zawodnicy where wzrost > 178
except
select imie,nazwisko,kraj, wzrost, waga
from zawodnicy where waga > 61

select imie, nazwisko, kraj , wzrost, waga
from zawodnicy where wzrost > 178
intersect
select imie,nazwisko,kraj, wzrost, waga
from zawodnicy where waga > 61

-- wypisz imie i nazwisko zawodnikow i trenerow wraz z informacją o kraju
-- dla trenerow wypisz null

select imie, nazwisko, kraj
from zawodnicy
union
select imie_t, nazwisko_t, null from trenerzy
order by kraj
<pre>