select *
from zawodnicy , trenerzy
where zawodnicy.id_trenera = trenerzy.id_trenera
select *
from zawodnicy z, trenerzy t
where z.id_trenera = t.id_trenera
select * from zawodnicy
select * from trenerzy
select *
from zawodnicy z join trenerzy t on z.id_trenera = t.id_trenera
select *
from zawodnicy z left join trenerzy t on z.id_trenera = t.id_trenera
select *
from zawodnicy z right join trenerzy t on z.id_trenera = t.id_trenera
select z.imie, t.imie_t, z.kraj
from trenerzy t left join zawodnicy z on z.id_trenera = t.id_trenera
select *
from zawodnicy z full join trenerzy t on z.id_trenera = t.id_trenera
select *
from zawodnicy z cross join trenerzy t
select *
from zawodnicy z join trenerzy t using (id_trenera)
select *
from zawodnicy z natural join trenerzy t
select *
from zawodnicy , trenerzy
where zawodnicy.id_trenera(+) = trenerzy.id_trenera
select *
from zawodnicy , trenerzy
where zawodnicy.id_trenera = trenerzy.id_trenera(+)
--cw 1
select z.imie, z.nazwisko, t.imie_t, t.nazwisko_t
from zawodnicy z join trenerzy t on z.kraj = t.kraj
-- cw 2
select z.id_zawodow , s.nazwa, m.nazwa_miasta, za.imie
from zawody z join skocznie s on z.id_skoczni = s.id_skoczni
join miasta m on m.id_miasta = s.id_miasta
join zawodnicy za on za.kraj = s.kraj_s
-- Trenerzy trenuja zawodnikow, zawodnicy uczestnicza w zawodach, zawody odbywaja sie na pewnych skoczniach, a skocznie znajduja sie w miastach
select distinct t.imie_t || ' ' || t.nazwisko_t, m.nazwa_miasta
from trenerzy t join zawodnicy z on z.id_trenera=t.id_trenera
join uczestnictwa u on u.id_zawodnika = z.id_zawodnika
join zawody zw on zw.id_zawodow = u.id_zawodow
join skocznie s on s.id_skoczni = zw.id_skoczni
join miasta m on m.id_miasta = s.id_miasta
-- 3 rodzaje relacji
--1) relacja 1 do *
--2) relacja * do *
--3) relacja 1 do 10
-- c4
select z1.imie || ' ' || z1.nazwisko, z2.imie || ' ' || z2.nazwisko
from zawodnicy z1 join zawodnicy z2 on z1.kraj = z2.kraj
where z1.nazwisko = 'MA£YSZ' and z1.nazwisko <> z2.nazwisko
--cw 5
select z1.imie || ' ' || z1.nazwisko, z2.imie || ' ' || z2.nazwisko
from zawodnicy z1 join zawodnicy z2 on z1.id_zawodnika > z2.id_zawodnika
-- cw6
select z1.imie || ' ' || z1.nazwisko, z2.imie || ' ' || z2.nazwisko, z1.wzrost, z2.wzrost
from zawodnicy z1 join zawodnicy z2 on z1.kraj = z2.kraj
where z1.wzrost > z2.wzrost
-- cw7
select *
from zawodnicy
where id_trenera is null
-- cw8
select distinct t.*
from zawodnicy z join trenerzy t on z.id_trenera = t.id_trenera
where z.id_trenera is not null
select z1.imie, z2.imie
from zawodnicy z1 join zawodnicy z2 on substr(z1.imie,1,1) = substr(z2.imie,1,1) and z1.id_zawodnika <> z2.id_zawodnika
-- wypisz pary zawodnioww i trenerow , urodzonych tego samego dnia tygodnia
select z.nazwisko, t.nazwisko_t, to_char(z.data_ur, 'Day')
from zawodnicy z join trenerzy t on to_char(z.data_ur, 'Day') = to_char(t.data_ur_t,'Day')
-- wypisz trenerow, ktorzy sa starsi o przynajmniej 5 lat od zawodnikow
select * from zawodnicy natural join trenerzy
select z.nazwisko, t.nazwisko_t, z.data_ur, t.data_ur_t
from zawodnicy z join trenerzy t on z.id_trenera = t.id_trenera and add_months(z.data_ur,-60) > t.data_ur_t
select z.nazwisko, t.nazwisko_t, z.data_ur, t.data_ur_t
from zawodnicy z join trenerzy t on z.id_trenera = t.id_trenera and add_months(z.data_ur,60) > t.data_ur_t
select z.imie, z.nazwisko from
(select imie, nazwisko, kraj
from zawodnicy ) z
select imie, nazwisko, bmi
from
(select imie, nazwisko, waga/power(wzrost/100,2) bmi
from zawodnicy ) t
where bmi > 20
select nazwisko, count(nazwa) ile from
(select z.nazwisko, s.nazwa
from zawodnicy z join uczestnictwa u on z.id_zawodnika = u.id_zawodnika
join zawody zw on zw.id_zawodow = u.id_zawodow
join skocznie s on s.id_skoczni = zw.id_skoczni) k
group by nazwisko
order by ile desc
-- 1) podzapytanie w sekcji from
-- 2) w sekcji select
-- 3) w sekcji where
select imie, nazwisko, (select avg(wzrost) from zawodnicy where kraj =z.kraj )
from zawodnicy z
select imie, nazwisko, wzrost
from zawodnicy
where wzrost > (select avg(wzrost) from zawodnicy)
-- cw 1
select * from zawodnicy
where wzrost = (select max(wzrost) from zawodnicy)
-- cw2
select * from zawodnicy
where waga= (select waga from zawodnicy where nazwisko = 'ALBORN')
select * from zawodnicy
where waga in (select waga from zawodnicy where kraj = 'POL')
select * from zawodnicy
where waga > all (select waga from zawodnicy where kraj = 'POL')
select id_zawodow,
(select (select nazwa_miasta from miasta where id_miasta = s.id_miasta)
from skocznie s where id_skoczni = z.id_skoczni) k
from zawody z
select id_zawodow, m.nazwa_miasta
from zawody z join skocznie s on z.id_skoczni = s.id_skoczni
join miasta m on m.id_miasta = s.id_miasta
-- cw 6
select kraj, sum( case when wzrost >180 then 1 else 0 end )
from zawodnicy
group by kraj
select tabA.kraj, nvl(tabB.ile,0) from
(select kraj
from zawodnicy
group by kraj) tabA
left join
(select kraj, count(*) ile
from zawodnicy
where wzrost > 180
group by kraj) tabB
on tabA.kraj = tabB.kraj
select kraj , (select count(*) from zawodnicy where kraj = z.kraj and wzrost >180)
from zawodnicy z
group by kraj
-- zadania
-- 1) wypisz nazwiska trenerow, ktorzy trenuja przynjamniej 2 zawodnikow, ktorych wzrost wynosi ponizej 175
select t.nazwisko_t, count(*)
from trenerzy t join zawodnicy z on z.id_trenera = t.id_trenera
where wzrost < 175
group by t.nazwisko_t
having count(*)>1
-- 2) wypisz zawodnikow, ktorzy startowali rzadziej niz srednia startow w ich druzynie
-- potrzebujemy 1) liczba startow dla kazdego zawodnika 2) dla kazdego kraju policzyc srednia liczba startow
select z.nazwisko, z.kraj, count(u.id_uczestnictwa) ileStartow
from zawodnicy z join uczestnictwa u on z.id_zawodnika = u.id_zawodnika
group by z.id_zawodnika,z.nazwisko, z.kraj
-- zeby policzyc srednia musimy znac sume startow / ile zawodnikow w kraju
select tabSumaStartow.kraj, tabSumaStartow.sumaStartow/ tabLiczbaZawodnikow.ile sredniaLiczbaStartow
from
(select z.kraj, count(u.id_uczestnictwa) sumaStartow
from zawodnicy z join uczestnictwa u on z.id_zawodnika = u.id_zawodnika
group by kraj) tabSumaStartow
join
(select kraj, count(id_zawodnika) ile
from zawodnicy
group by kraj) tabLiczbaZawodnikow
on tabSumaStartow.kraj = tabLiczbaZawodnikow.kraj
-- ostateczne rozwiazanie
select tabZawodnicy.nazwisko, tabZawodnicy.ileStartow, tabSrednieStarty.sredniaLiczbaStartow
from
(select z.nazwisko, z.kraj, count(u.id_uczestnictwa) ileStartow
from zawodnicy z join uczestnictwa u on z.id_zawodnika = u.id_zawodnika
group by z.id_zawodnika,z.nazwisko, z.kraj) tabZawodnicy
join
(select tabSumaStartow.kraj, tabSumaStartow.sumaStartow/ tabLiczbaZawodnikow.ile sredniaLiczbaStartow
from
(select z.kraj, count(u.id_uczestnictwa) sumaStartow
from zawodnicy z join uczestnictwa u on z.id_zawodnika = u.id_zawodnika
group by kraj) tabSumaStartow
join
(select kraj, count(id_zawodnika) ile
from zawodnicy
group by kraj) tabLiczbaZawodnikow
on tabSumaStartow.kraj = tabLiczbaZawodnikow.kraj) tabSrednieStarty
on tabZawodnicy.kraj = tabSrednieStarty.kraj
where tabZawodnicy.ileStartow> tabSrednieStarty.sredniaLiczbaStartow
-- 3) Podaj ilu zawodnikow urodzilo sie w kazdej z pór roku (zima to 12,1,2)
select poraRoku, count(*)
from
(select z.nazwisko,
case
when nrMsc in (12,1,2) then 'zima'
when nrMsc between 3 and 5 then 'wisona'
when nrMsc < 9 then 'lato'
else 'jesien'
end poraRoku
from
(select nazwisko, extract(month from data_ur) nrMsc
from zawodnicy) z) k
group by poraRoku
select count(*) from zawody
select * from miasta