Dzień 1 (Szkolenie / SQL Kraków)

use A_Zawodnicy
 
select 5 ,6, 5+6, 10.0/3

select 5, imie, nazwisko 
from zawodnicy

select * , imie
from zawodnicy

select [imie] as 'a bc', imie as [a bc],
imie as abc, imie abc
from zawodnicy

select imie from dbo.zawodnicy

select imie 
from zawodnicy

select imie, nazwisko
from zawodnicy

select imie , wzrost + 2 [nowy wzrost]
from zawodnicy 

select imie + '2'
from zawodnicy

-- komentarz jednolinowy 

/* komentarz 
	wielo
	linowy
	*/

	-- zad1) wypisz wszystkich skoczkow wraz z maksymalna dlugoscia
	-- nart jaka moga miec wiedzac, ze makymalna dl. nart wynosi 
	-- 146% jego wzrostu. 
	select imie, nazwisko, wzrost*1.46 [max dł nart]
	from zawodnicy

	-- zad2) dla kazdego zawodnika wypisz BMI ( iloraz masy 
	 -- kwadratu jego wzrostu wyrazonego w metrach 
	 select imie, nazwisko,  waga / (wzrost/100.0 * wzrost/100.0) bmi
	 from zawodnicy


	 -- zad3) wypisz liste zawodnikow w formacie "imie, nazwisko (kraj)"
	 -- w jednej kolumnie np: Adam, MALYSZ (POL)

	   select imie + ', ' + nazwisko + ' (' + kraj + ')'
	   from zawodnicy 

 
	   -- funkcje 

	   select ROUND(10.0/3,2)

	   select abs(-5), ceiling(2.3), floor(2.7), power(2,3),
	       sqrt(9), sign(3)

		select imie, nazwisko, round(waga/POWER(wzrost/100.0,2),2)
		from zawodnicy

		select round(10.0/3,2), format(123.12345,'00.0000')

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

		-- funckje tekstowe 

		select len('ala ma kota'),
		       upper('ala ma kota'),
			   lower('ALA MA KOTA'),
			   CHARINDEX('ma','ala ma kota'),
			   SUBSTRING('ala ma kota',5,2),
			   LEFT('ala ma kota',3),
			   RIGHT('ala ma kota',4),
			   ltrim('    ala ma kota'),
			   rtrim('ala ma kota   '),
		       rtrim(ltrim('   ala ma kota    ')),
			   replace('ala ma kota','ma','bedzie miała')
-- zad1) wypisz w jednej kolumnie imie i nazwisko ale tak, ze 
-- nazwisko będzie z dużej litery a nie DUŻYMI LITERAMI jak jest obecnie

select imie + ' ' + left(nazwisko,1) + 
					lower(SUBSTRING(nazwisko,2,len(nazwisko)-1))
from zawodnicy 

-- zad2) wypisz imie i inicjal nazwiska zawodnikow, z kropką

select imie + ' ' + left(nazwisko,1) + '.'
from zawodnicy

-- zad3) wypisz zawodników w formie "imie nazwisko wazy x kg" 
      -- np Adam MALYSZ waży 56 kg 

select imie + ' ' + nazwisko + ' waży ' + format(waga,'0') + ' kg'
from zawodnicy

select imie + ' ' + nazwisko + ' waży ' + convert(varchar,waga) + ' kg'
from zawodnicy

-- zad4) we wszystkich nazwiskach zamień literę 
--      'a' na 'e' natomiast 'e' na 'a'

select replace(replace(nazwisko,'a','e'),'e','a')
from zawodnicy

select replace(replace(replace(nazwisko,'a','!'),'e','a'),'!','e')
from zawodnicy


-- funkcje zwiazne z przetwarzaniem dat 

select GETDATE(), 
	   DATEFROMPARTS(2018,12,31),
	   DATEADD(m,2,GETDATE()),  -- m miesiac, d - dzien , year - rok
	   DATEDIFF(d,getdate(),datefromparts(2018,12,31)),
	   DATEDIFF(year,getdate(),datefromparts(2018,12,31)),
	   day(getdate()),
	   month(getdate()),
	   year(getdate())

-- zad1) podaj wiek zawodnikow w latach

  select imie, nazwisko, DATEDIFF(year,data_ur,getdate()) wiek
  from zawodnicy

  select imie, nazwisko, year(getdate())- year(data_ur)
  from zawodnicy

-- zad2) podaj kiedy w aktualnym roku przypadaja ich urodziny

	select imie, nazwisko, 
	DATEFROMPARTS(year(getdate()),month(data_ur),day(data_ur))
	from zawodnicy

-- zad3) podaj ile dni ma miesiac w ktorym sie urodzili

    select imie, nazwisko,
	  day(
	   DATEADD(d,-1,
			DATEADD(m,1,
				DATEFROMPARTS(YEAR(getdate()),month(data_ur),1))))
	from zawodnicy

-- zad4)*  podaj kiedy sa najblizsze urodziny danego zawodnika

		select * from zawodnicy


		-- 1) ktos mial        -> rok aktualny + 1
		-- 2) ktos bedzie mial -> rok aktualny + 0

select imie, nazwisko, 
(sign(DATEDIFF(d,
	DATEFROMPARTS(year(getdate()),month(data_ur),day(data_ur)),
	GETDATE()))+1)/2,

	DATEFROMPARTS(year(getdate())+0,month(data_ur),day(data_ur))
from zawodnicy

select imie, nazwisko, 
	DATEFROMPARTS(year(getdate())+
		(sign(DATEDIFF(d,
		DATEFROMPARTS(year(getdate()),month(data_ur),day(data_ur)),
		GETDATE()))+1)/2
	,month(data_ur),day(data_ur))
from zawodnicy



/*
year, yyyy, yy = Year
quarter, qq, q = Quarter
month, mm, m = month
dayofyear = Day of the year
day, dy, y = Day
week, ww, wk = Week
weekday, dw, w = Weekday
hour, hh = hour
minute, mi, n = Minute
second, ss, s = Second
millisecond, ms = Millisecond*/




select * from zawodnicy
where ((waga > 60) and (waga < 75)) or wzrost = 168


--zad1) wypisz tylko polakow
  select *
  from zawodnicy 
  where kraj = 'POL' collate Polish_CS_AS 
   
  select serverproperty('collation') 
  SELECT DATABASEPROPERTYEX('A_Zawodnicy', 'Collation') SQLCollation;

--zad2) wypisz zawodnikow niemieckojezycznch
select * from zawodnicy
where kraj = 'ger' or kraj = 'aut'

select * from zawodnicy
where kraj in ('ger','aut')

--zad3) wypisz zawodnikow o masie bmi mniejszej niz 20

select *,waga/POWER(wzrost/100.0,2) bmi from zawodnicy
where waga/POWER(wzrost/100.0,2) < 20

--zad4) wypisz zawodnikow, ktorzy maja czetero literowe imie
select * from zawodnicy
where len(imie)=4

--zad5) wypisz zawod.. urodzonych w sezonie od listopada do marca
select * from zawodnicy
where MONTH(data_ur) >=11 or month(data_ur)<=3

select * from zawodnicy
where MONTH(data_ur) >10 or month(data_ur)<4

select * from zawodnicy
where MONTH(data_ur) in (11,12,1,2,3)

select * from zawodnicy
where MONTH(data_ur) not between 4 and 10

select * from zawodnicy
where len(nazwisko)>=3 and len(nazwisko) <=5

select * from zawodnicy
where len(nazwisko) between 3 and 5 

--zad6) wypisz zawodnikow, zawierajacych litery N lub W

select * from zawodnicy
where charindex('n',nazwisko) >0 
      or CHARINDEX('w',nazwisko)>0

select * from zawodnicy
where charindex('n',nazwisko) + CHARINDEX('w',nazwisko) >0

select * from zawodnicy
where nazwisko like '%en'

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

select * from zawodnicy
where imie like 'Mar_in'

select * from zawodnicy
where imie like 'Mar[tcw]in'

select * from zawodnicy
where imie like 'Mar[^tw]in'

select * from zawodnicy
where nazwisko like '%n%' or nazwisko like '%w%'

select * from zawodnicy
where nazwisko like '%[nw]%'

--zad7) wypisz trenerow bez podanej daty urodzenia 

select * from trenerzy 
where data_ur_t is null

select * from trenerzy 
where data_ur_t is not null

select * from trenerzy 
where data_ur_t > 234

select data_ur_t, convert(int,data_ur_t)
from trenerzy

select convert(datetime,0)


select * from zawodnicy
order by nazwisko

select * from zawodnicy
order by kraj desc, wzrost asc

select *
from zawodnicy
order by wzrost , id_zawodnika

select * from zawodnicy order by kraj

select * from zawodnicy
order by data_ur desc

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

select * from trenerzy
order by data_ur_t desc

select imie, nazwisko, waga/power(wzrost/100.0,2) bmi
from zawodnicy
order by bmi


select distinct kraj from zawodnicy

select distinct kraj,waga from zawodnicy

select distinct data_ur_t from trenerzy

select top 3 * 
from zawodnicy
order by wzrost desc

select top 50 percent * from zawodnicy
order by wzrost

select * from zawodnicy
order by wzrost
offset 3 rows 
fetch next 4 rows only


-- jezeli ktos ma ponad 175 cm to jest wysoki
-- a w.p.p. niski

select imie, nazwisko, wzrost, 
		iif(wzrost>175,'wysoki','niski') typ
from zawodnicy

-- poniej 170 to niski, wiecenj niz 180 wyoski 
-- pomiedzy to sredni 
select imie, nazwisko, wzrost, 
	iif(wzrost<170,'niski',iif(wzrost>180,'wysoki','sredni'))
from zawodnicy

select imie, nazwisko, wzrost, 
	case
		when wzrost < 170 then 'niski'
		when wzrost > 185 then 'bardzo wysoki'
		when wzrost > 180 then 'wysoki'
		else 'sredni'
	end typ
from zawodnicy


select *, iif(waga/power(wzrost/100.0,2) < 20,'zle','ok')
from zawodnicy

select *,iif(data_ur_t is null,'nie znana','znana')
from trenerzy


select *,iif(data_ur_t is null,
			'brak danych',
			convert(varchar,data_ur_t))
from trenerzy

select convert(varchar,GETDATE()),
       cast(GETDATE() as varchar),
	   format(GETDATE(),'ddxxMM.yyyy')

select format(GETDATE(),'\d\z\i\ś: dd.MM.yyyy')

select format(GETDATE(),'"dziś:" dd.MM.yyyy')


select 
	case 
		when kraj = 'pol' then 'Pan '
		when kraj in ('ger','aut') then 'Herr '
		when kraj = 'usa' then 'Mr'
		else ''
	end + imie + ' ' + nazwisko
from zawodnicy

select imie, nazwisko, 
iif(getdate() < 
	datefromparts(year(getdate()),MONTH(data_ur),day(data_ur)),
	'nie mial','mial')
from zawodnicy


select choose(4,'a','b','c')

-- dla kazdego zawodnika wypisz słownie 
--z ilu liter sklada sie jego imie
-- jesli jego imie jest krotsze od 5, jesli jest dluzsze 
-- lub rowne 5 to  wypisz "wiecej" 

select imie,
	iif(len(imie)> 4,'wiecej',
		 CHOOSE(len(imie),'jeden','dwa','trzy','cztery'))
from zawodnicy

select data_ur, format(data_ur,'dddd','pl-pl')
from zawodnicy

 
select * from zawodnicy