Oracle dzien1

drop table zawodnicy
CREATE TABLE zawodnicy (
    id_zawodnika number,
	id_trenera number,
    imie varchar2(100),
    nazwisko varchar2(100),
    kraj character(3),
    data_ur date,
    wzrost number,
    waga number
);


INSERT INTO zawodnicy VALUES (2,4, 'Marcin', 'BACHLEDA', 'POL', date '1982-09-04', 166, 56);
INSERT INTO zawodnicy VALUES (3,4, 'Robert', 'MATEJA', 'POL', date '1974-10-05', 180, 63);
INSERT INTO zawodnicy VALUES (4,5, 'Alexander', 'HERR', 'GER', date '1978-10-04', 173, 65);
INSERT INTO zawodnicy VALUES (5,5, 'Stephan', 'HOCKE', 'GER', date '1983-10-20', 178, 59);
INSERT INTO zawodnicy VALUES (6,5, 'Martin', 'SCHMITT', 'GER', date '1978-01-29', 181, 64);
INSERT INTO zawodnicy VALUES (7,5, 'Michael', 'UHRMANN', 'GER', date '1978-09-09', 184, 64);
INSERT INTO zawodnicy VALUES (8,5, 'Georg', 'SPAETH', 'GER', date '1981-02-24', 187, 68);
INSERT INTO zawodnicy VALUES (9,2, 'Matti', 'HAUTAMAEKI', 'FIN', date '1981-07-14', 174, 57);
INSERT INTO zawodnicy VALUES (10,2, 'Tami', 'KIURU', 'FIN', date '1976-09-13', 183, 59);
INSERT INTO zawodnicy VALUES (11,2, 'Janne', 'AHONEN', 'FIN', date '1977-05-11', 184, 67);
INSERT INTO zawodnicy VALUES (12,1, 'Martin', 'HOELLWARTH', 'AUT', date '1974-04-13', 182, 67);
INSERT INTO zawodnicy VALUES (13,1, 'Thomas', 'MORGENSTERN', 'AUT', date '1986-10-30', 174, 57);
INSERT INTO zawodnicy VALUES (15,3, 'Tommy', 'INGEBRIGTSEN', 'NOR', date '1977-08-08', 179, 56);
INSERT INTO zawodnicy VALUES (16,3, 'Bjoern-Einar', 'ROMOEREN', 'NOR', date '1981-04-01', 182, 63);
INSERT INTO zawodnicy VALUES (17,3, 'Roar', 'LJOEKELSOEY', 'NOR', date '1976-05-31', 175, 62);
INSERT INTO zawodnicy VALUES (14,null, 'Alan', 'ALBORN', 'USA', date '1980-12-13', 177, 57);
INSERT INTO zawodnicy VALUES (1,4, 'Adam', 'MA?YSZ', 'POL', date '1977-12-03', 169, 60);




select * from zawodnicy 


select imie, nazwisko, kraj from zawodnicy 

-- komentarz 

/* komenatrz 
wielo liniowy
*/

select distinct kraj from zawodnicy 


select imie, nazwisko, wzrost, wzrost +2 as "nowa kolumna" from zawodnicy

-- operatory :  dodawanie + odejmowanie - monizenie  * dzielenie  / 

select imie, nazwisko, wzrost / 100 "wzrost w metrach" from zawodnicy

select imie, nazwisko, wzrost * 1.46 from zawodnicy

select imie, nazwisko, waga/ ((wzrost/100)*(wzrost/100)) "bmi" from zawodnicy

select imie, nazwisko, waga/ power(wzrost/100,2) "bmi" from zawodnicy

select * from zawodnicy


select imie, nazwisko, data_ur, to_char(data_ur, 'dd-mm-yyyy') from zawodnicy

select power(2,3) from dual

-- cw 1
select imie, nazwisko, to_char(data_ur, 'dd.mm.yyyy"rok"') from zawodnicy
-- cw 2
select imie, nazwisko, to_char(data_ur, 'Day dd.mm.yyyy"r,"') from zawodnicy

-- cw 3
select imie, nazwisko, to_char(data_ur, 'ddd" dnia "yyyy "roku"') from zawodnicy

select imie, nazwisko, to_char(waga/ power(wzrost/100,2),'99.999') "bmi" from zawodnicy

select round(4.5), trunc(4.5) from dual


-- funckje matematyczne

--cw 1 

select imie, nazwisko, floor(wzrost*1.46) from zawodnicy

-- cw2 

select imie, nazwisko, round(waga/ power(wzrost/100,2),1) "bmi" from zawodnicy

-- c3 

select floor(-4.5), trunc(-4.5) from dual

select * from zawodnicy


select concat('a','b') || 'c' || concat('d',concat('e','f'))  from dual 

-- funkcje tekstowe

-- cw 1 

select imie || ' ' || substr(nazwisko,1,1) || '.' from zawodnicy

-- cw 2 

select imie || ' ' || nazwisko || ' waży ' || waga || ' kg' from zawodnicy

-- cw 3 

select imie || ' ' || initcap(nazwisko) from zawodnicy

-- cw 4 

select imie || ' ' || nazwisko || ' (' || kraj || ')' from zawodnicy

-- cw 5 

select lpad(imie || ' ' || nazwisko || ' (' || kraj || ')' ,35,'-') from zawodnicy

-- cw 6

select imie || ' ' || lower(substr(nazwisko,1,1)) || initcap(substr(nazwisko,2))
from zawodnicy


-- funkcje dat 
-- cw 1
 select imie, nazwisko, sysdate - data_ur from zawodnicy

-- roznica pomiedzy dwoma datami jest wyrazana zawsze w dniach 

-- cw 2  

select imie, nazwisko, floor(months_between(sysdate, data_ur) / 12) from zawodnicy



select imie, nazwisko, wzrost,
    case 
        when wzrost > 170 then 'wysoki' 
        when wzrost > 150 and wzrost < 165 then 'średni' 
        else 'niski' 
    end
, kraj from zawodnicy


select imie, nazwisko, wzrost,
case wzrost
 when 166 then 'niski'
 when 173 then 'sredni'
 when 182 then 'wysoki'
 else 'inny'
end
from zawodnicy


select imie, nazwisko, wzrost,
decode( wzrost, 166,'niski', 173,'sredni',182,'wysoki','inny') from zawodnicy


select * from trenerzy


-- cw1 (pierwsze)

select imie , nazwisko, 
case 
 when waga/power(wzrost/100,2) >= 20 then 'ok'
 else 'zle' 
end
from zawodnicy

-- cw1 (drugie ) 

select imie_t, case when data_ur_t is null then 'nie' else 'tak' end
from trenerzy 

select imie_t, nvl2(data_ur_t, 'tak','nie') from trenerzy

-- cw2 

select imie_t, 
case
 when data_ur_t is null then 'brak'
 else to_char(data_ur_t,'dd-mm-yyyy')
end
from trenerzy


-- cw3 

select imie, nazwisko, wzrost, 

case when wzrost/2 = trunc(wzrost/2) then 'tak' else 'nie' end "Wzrost parzysty" from zawodnicy

select imie, nazwisko, wzrost, 
    case when mod(wzrost,2)=0 then 'tak' else 'nie' end "Wzrost parzysty" from zawodnicy

select mod(9,2) from dual -- wyswietla reszte z dzielenia 

-- cw 4 

select decode(kraj, 'POL', 'Pan ', 'GER', 'Herr ', 'AUT', 'Herr ', 'USA', 'Mr ') ||
    imie || ' ' || nazwisko from zawodnicy
    
    
--cw5 

select imie, data_ur, 
case 
    when to_char(data_ur, 'MM-DD') < to_char(sysdate,'MM-DD') then 'juz mial'
    when to_char(data_ur, 'MM-DD') = to_char(sysdate,'MM-DD') then 'dziś ma'
    else 'bedzie mial'
end
from zawodnicy
    
    -- cw 6 
    
   select imie, nazwisko, data_ur,
    to_date(extract(year from sysdate)+1 || to_char(data_ur,' MM DD') ,'YYYY MM DD') 
   from zawodnicy 
    
select imie, data_ur, 
case 
    when to_char(data_ur, 'MM-DD') < to_char(sysdate,'MM-DD') then to_date(extract(year from sysdate)+1 || to_char(data_ur,' MM DD') ,'YYYY MM DD') 
    else                                                           to_date(extract(year from sysdate)+0 || to_char(data_ur,' MM DD') ,'YYYY MM DD') 
end -sysdate "za ile urodziny"
from zawodnicy
    
-- cw 7 


select imie , nazwisko, 
case 
 when waga/power(wzrost/100,2) <20  then 'zaa lekki'
 else 'ok' 
end
from zawodnicy
    
 
 SELECT  imie, nazwisko, kraj
 from zawodnicy 
where  kraj = 'POL' or kraj = 'GER'
 
 
  SELECT  imie, nazwisko, kraj
 from zawodnicy 
where  kraj in ('POL' ,'GER')



SELECT  imie, nazwisko, kraj
from zawodnicy 
where length(imie)=4


-- cw2 

select * from zawodnicy where substr(imie,1,1) = 'A' or substr(nazwisko,1,1) = 'A'  

select * from zawodnicy where imie like 'A%' or nazwisko like 'A%'


select * from zawodnicy where imie like '%a%'

select * from zawodnicy where imie like '_a%'


select * from zawodnicy where imie like '\_% ' escape '\'


-- cw 3 


  SELECT  imie, nazwisko, kraj
 from zawodnicy 
where  kraj in ('GER' ,'AUT')


-- cw4 

select * from zawodnicy 
where waga/power(wzrost/100,2) < 20
 
 -- cw5 
 
 select imie, nazwisko, months_between(sysdate,data_ur)/12 from zawodnicy 
 where months_between(sysdate,data_ur)/12 > 40
 
 -- cw 7 
 
 select * from trenerzy where data_ur_t is null
    
    select * from zawodnicy 
    where kraj not in ('POL','GER')
    
  select * from zawodnicy where extract(month from data_ur) < 4 or  extract(month from data_ur) > 10 
  
  select * from zawodnicy where extract(month from data_ur) not between  4 and 10
  
  
  -- sortowanie 
  
  select * from zawodnicy
  order by kraj desc, wzrost 
  
  -- cw 1 
  select * from zawodnicy order by wzrost , id_zawodnika
  
  -- cw2 
  
  -- cw 3 -   

  select * from zawodnicy order by data_ur desc
  
-- cw 4 

select imie || ' ' || ' (' || kraj || ') ' from zawodnicy order by nazwisko

-- cw 5 

select * from trenerzy order by data_ur_t


-- cw 6 

select imie , nazwisko, sign(waga/power(wzrost/100,2)-20), waga/power(wzrost/100,2) "bmi" from zawodnicy 
order by sign("bmi"-20), nazwisko

SELECT -- 6
FROM --1 
WHERE --2
JOIN --3
GROUP BY --4
HAVING --5
ORDER BY -- 7  

-- grupowanie 

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

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

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

select * from zawodnicy


select max(wzrost) from zawodnicy


select to_char(wzrost,'000.00') from zawodnicy



-- cw 1 

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

-- cw2 

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


--cw  3 

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


-- cw 4 

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

-- cw 5 

select kraj,
    sum(case when wzrost > 180 then 1 else 0 end) "wysocy", 
    sum(case when wzrost < 175 then 1 else 0 end) "niscy"  
from zawodnicy 
group by kraj

-- cw 7 

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



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

--cw2 

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