Kódím.cz
3

Výuka

Masíčko, tady už končí zábavné počteníčko a začíná zákopová válka se středníky, uvozovkami, čárkami. SELECT, FROM, WHERE, LEFT(), INNER JOIN, WITH, ROW_NUMBER() OVER (ORDER BY PARTITION BY) atd.

Lekce 2 - Operátory a funkce

Operátory a funkce nám umožňují vytvářet sloupečky a filtrovat data podle určitého kritéria. Funkcí existuje mraky, v každé databázi najdeme minimálně ty základní. Ani operátory nebudou ve včech databázích stejné, ale teď se soustřeďme se na náš snowflake.

Základní operátory

  • je větší >
  • je menší <
  • je menší nebo rovno <=
  • je větší nebo rovno >=
  • je není rovno !=, <>
  • je rovno =

Práce s textem

  • SPLIT - Rozdělí řetězec na položky
  • SUBSTRING - Vrátí část řetězce
  • LEFT - Vrátí část řetězce od začátku
  • RIGHT - Vrátí část řetězce od konce
  • UPPER - Převede řetězec na velká písmena
  • LENGHT - Vrátí délku řetězce

Matematické funkce

  • HAVERSINE - Výpočet vzdálenosti
  • ROUND - Zaokrouhlení čísla
  • FLOOR - Nejmenší celé číslo
  • CEIL - Největší celé číslo

Práce s datumem a časem

Logické operátory AND, OR, NOT

Logické operátory asi lepší vysvětlit na příkladech.

-- použití operátoru AND
SELECT LEN('Prague')=5 AND 'Prague' LIKE 'G%';
-- výsledek: FALSE

-- použití operátoru OR
SELECT (LEN('Prague')=3) OR ('Prague' LIKE 'G%');
-- výsledek: TRUE

-- použití operátoru NOT
SELECT NOT (LEN('Prague')=3);
-- výsledek: TRUE

-- kombinace operátorů AND, OR a NOT
SELECT (LEN('Prague')=5) OR (NOT ('Prague' LIKE 'P%'));
-- výsledek: FALSE

-- využití závorek
SELECT ((LEN('Prague')=5) OR (LEN('Prague')<3)) AND ('Prague' LIKE 'P%');
-- výsledek: TRUE

Samotné hodnoty TRUE a FALSE nám moc k ničemu nejsou (i když neříkej hop), ale skvěle se nám hodí v podmínkách.

-- použití operátoru AND v podmínce WHERE
SELECT *
FROM TEROR
WHERE (LENGTH(CITY)=5) AND (CITY LIKE 'P%');
-- výsledek: vrátí řádky, kde délka hodnoty v sloupečku CITY
-- je rovna 5 a hodnota v sloupečku CITY začíná na 'P'

-- použití operátoru OR
SELECT *
FROM TEROR
WHERE (LENGTH(CITY)=3) OR (CITY LIKE 'P%');
-- výsledek: vrátí řádky, kde délka hodnoty v sloupečku CITY
-- je rovna 3 nebo hodnota v sloupečku CITY začíná na 'P'

-- použití operátoru NOT
SELECT *
FROM TEROR
WHERE NOT (LENGTH(CITY)=3);
-- výsledek: vrátí řádky, kde délka hodnoty v sloupečku CITY
-- není rovna 3

-- kombinace operátorů AND, OR a NOT
SELECT *
FROM TEROR
WHERE (LENGTH(CITY)=5) OR (NOT (CITY LIKE 'P%'));
-- výsledek: vrátí řádky, kde délka hodnoty v sloupečku CITY
-- je rovna 5 nebo hodnota v sloupečku CITY nezačíná na 'P'

-- využití závorek v podmínce WHERE
SELECT *
FROM TEROR
WHERE ((LENGTH(CITY)=5) OR (LENGTH(CITY)<3)) AND (CITY LIKE 'P%');
-- výsledek: vrátí řádky, kde délka hodnoty v sloupečku CITY
-- je buď rovna 5 nebo menší než 3 a hodnota v sloupečku CITY začíná na 'P'

BETWEEN

SELECT *
FROM TEROR
WHERE YEAR BETWEEN 1979 AND 2021;

-- Očekávaný výsledek:
-- Všechny řádky s rokem mezi 1979 a 2021

CASE

SELECT CITY,
CASE
  WHEN YEAR >= 1979 AND YEAR <= 2000 THEN 'Old Era'
  WHEN YEAR > 2000 THEN 'New Era'
  ELSE 'Before 1979'
END AS ERA
FROM TEROR;

-- Očekávaný výsledek:
-- Sloupce CITY a nový sloupec ERA, kde je podle roku události označení era
-- jako Old Era, New Era nebo Before 1979.

IFNULL (ajaj NULL, to lektor vysvětlí)

SELECT CITY,
  IFNULL(CITY, 'Unknown') AS CITY_NONULLS,
  IFNULL(RANSOMNOTE, 'Unknown') AS RANSOMNOTE_NONULLS
FROM TEROR
WHERE CITY is NULL or CITY = 'Unknown' order by CITY NULLS FIRST LIMIT 500; -- podmínka, která ukáže zajímavé řádky

-- Očekávaný výsledek:
-- Výstup bude obsahovat sloupečky CITY, CITY_NONULLS (kde se NULL hodnoty změní na "Unknown")
-- a RANSOMNOTE_NONULLS (kde se NULL hodnoty v RANSOMNOTE změní na "Unknown").