Lekce 1 - Data, databáze, Snowflake, tabulky, dotazy
Data, databáze, Snowflake, tabulky, dotazy
- Co je to SQL a jak se používá k práci s databázemi?
- Připojení k databázi Snowflake a spouštění dotazů
- Nastavení účtu Snowflake a přístup k webovému rozhraní
- Spouštění dotazů a zobrazování výsledků ve webovém rozhraní
- Představení databáze
COURSESve Snowflake a její struktury- Schémata, role
- Global Terrorism Database a její účel
- Popis tabulky teror
Základní syntaxe příkazu SELECT
SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...;
- Získávání dat z jedné tabulky:
SELECT,FROM,WHERE - Výběr konkrétních sloupců: seznam názvů sloupců, zástupný znak (*),
EXCLUDE - Třídění výsledků:
ORDER BY,ASC,DESC - Omezení výsledků:
LIMIT - Filtrování řádků pomocí klauzule
WHERE- Porovnávací operátory:
=,>,>=,<,<=,<>,BETWEEN,IN,LIKE,IS NULL - Logické operátory:
AND,OR,NOT
- Porovnávací operátory:
Jdeme na to!
Než začneme
- Nejjednodušší SQL kód, prázdný příkaz zakončený středníkem
; - Nejjednodušší SQL kód, který něco vrátí
SELECT 1;
Získávání dat z jedné tabulky: SELECT, FROM, WHERE
-
Nejjednodušší kód, který pracuje s tabulkou
SELECT * FROM TEROR;První dotaz -
Použití příkazu
SELECTk výběru sloupců, které chcete zobrazit ve výsledcíchSELECT eventid, iyear, country_txt -
Citlivost na velká malá písmena, používání dvojitých (!) uvozovek
SELECT "eventid", "IYEAR", country_txt -
Můžete také vybrat všechny sloupce pomocí zástupného znaku *
SELECT * -
Pokud chceme skoro všechny sloupečky, můžeme se nechtěných zbavit klauzulí
EXCLUDE(snowflake, bigquery, teradata ...)SELECT * EXCLUDE (eventid, eventdade) -
Použití klauzule
FROMk určení tabulky, ze které chcete vybírat dataFROM TEROR -
Použití klauzule
WHEREk filtrování řádků podle určitých podmínekWHERE iyear >= 2000 -
Náš první "kompletní" dotaz, vybere tři sloupce a všechny řádky z tabulky teror
SELECT eventid, iyear, country_txt FROM TEROR; -
Sloupečky můžeme přejmenovávat, jak se nám hodí (pomocí
AS)SELECT eventid AS ID_UDALOSTI, iyear AS ROK, country_txt AS ZEME FROM TEROR; -
Sloupečky můžeme přejmenovávat a protože lenosti se meze nekladou,
ASmůžeme vynechatSELECT eventid ID_UDALOSTI, iyear ROK, country_txt ZEME FROM TEROR; -
V SQL je úplně jedno, kde máme mezery a konce řádek. Toho se dá využít k formátování kódu
SELECT eventid AS ID_UDALOSTI , iyear AS ROK , country_txt AS ZEME FROM TEROR; -
Komentáře jsou zlaté drobečky, které nás zachrání, až se jednou ke kódu vrátíme, nebo se na něj bude dívqt někdo jiný a bude se snažit pochopit, co má všechno to SQL znamenat
SELECT eventid AS ID_UDALOSTI -- prejmenovani sloupecku pro ucely reportu , iyear AS ROK -- prejmenovani sloupecku pro ucely reportu , country_txt AS ZEME -- prejmenovani sloupecku pro ucely reportu FROM TEROR; /* Z tabulky bereme vsechny radky a tri sloupecky: - eventid - iyear - country_txt Ty uz jsou davno vycistene a staci nam na vsechny reporty, ktere kdy kdo vymysli. Detaily se daji najit na http://detaily.com/terorism */ -
Náš první dotaz, s filtrem
SELECT eventid, iyear, country_txt FROM TEROR WHERE iyear >= 2019; -- jen udalosti od roku 2000
Třídění výsledků: ORDER BY, ASC, DESC
- Seřadímě si výsledky
SELECT eventid, iyear, country_txt FROM TEROR ORDER BY eventid; - Seřadímě si výsledky opačně
SELECT eventid, iyear, country_txt FROM TEROR ORDER BY eventid DESC; - Seřadímě si výsledky podle více sloupců
SELECT eventid, iyear, country_txt FROM TEROR ORDER BY iyear DESC, imonth DESC;
Omezení výsledků: LIMIT
- Vybereme jen prvních 5 řádek
SELECT eventid, iyear, country_txt FROM TEROR ORDER BY iyear DESC, imonth DESC LIMIT 5; - Vybereme jen prvních 5000 řádek
SELECT eventid, iyear, country_txt FROM TEROR ORDER BY iyear DESC, imonth DESC LIMIT 5000;
Filtrování řádků pomocí klauzule WHERE
Porovnávací operátory: =, >, >=, <, <=, <>, BETWEEN, IN, LIKE, ILIKE
- Filtrujeme podle zemí
SELECT eventid, iyear, country_txt FROM TEROR WHERE country_txt = 'Afghanistan' ORDER BY iyear DESC, imonth DESC LIMIT 5; - Filtrujeme podle zemí
SELECT eventid, iyear, country_txt FROM TEROR WHERE country_txt in ('Austria', 'Germany') ORDER BY iyear DESC, imonth DESC LIMIT 5; - Filtrujeme země začínající na A ...
SELECT eventid, iyear, country_txt FROM TEROR WHERE country_txt like 'A%' ORDER BY iyear DESC, imonth DESC LIMIT 5; - Filtrujeme země začínající na A/a ...
SELECT eventid, iyear, country_txt FROM TEROR WHERE country_txt ilike 'A%' ORDER BY iyear DESC, imonth DESC LIMIT 5; - Filtrujeme roky mezi ...
SELECT eventid, iyear, country_txt FROM TEROR WHERE iyear BETWEEN 2018 AND 2019 ORDER BY iyear DESC, imonth DESC LIMIT 5;
Logické operátory: AND, OR, NOT
-
ANDznamená, že obě spojené podmínky musí platit zároveňcountry_txt = 'Germany' AND weaptype1_txt ='Fake weapons'vybere jen útoky fake zbraněmi v Německu -
ORznamená, že aspoň jedna ze spojených podmínek musí platitcountry_txt = 'Germany' AND weaptype1_txt ='Fake weapons'vybere všechny útoky fake zbraněmi a všechny útoky v Německu -
NOTpodmínku logicky obrátí,NOT iyear > 2023vybere všechny útoky roky menší nebo rovné 2023 -
Kombinujeme filtry/podmínky ...
SELECT eventid, iyear, country_txt FROM TEROR WHERE iyear BETWEEN 2018 AND 2019 AND country_txt ilike 'A%' ORDER BY iyear DESC, imonth DESC LIMIT 5;SELECT eventid, iyear, country_txt FROM TEROR WHERE iyear = 2000 OR iyear = 2015 ORDER BY iyear DESC, imonth DESC LIMIT 5;SELECT eventid, iyear, country_txt FROM TEROR WHERE country_txt ilike 'A%' OR country_txt = 'Germany' ORDER BY iyear DESC, imonth DESC LIMIT 5; -
Negujeme podmínky
SELECT eventid, iyear, country_txt FROM TEROR WHERE NOT country_txt ilike 'A%' OR country_txt = 'Germany' ORDER BY iyear DESC, imonth DESC LIMIT 5; -
Bacha na závorky
SELECT eventid, iyear, country_txt FROM TEROR WHERE NOT (country_txt ilike 'A%' OR country_txt = 'Germany') ORDER BY iyear DESC, imonth DESC LIMIT 5;
Unikátní hodnoty DISTINCT
Použitím operátoru DISTINCT získáme unikátní hodnoty z celého dotazu.
-
seznam měst v tabulce
SELECT DISTINCT CITY FROM TEROR; -- vrátí seznam měst v tabulce -
seznam kanadských měst v tabulce
SELECT DISTINCT CITY FROM TEROR WHERE COUNTRY_TXT = 'Canada'; -- vrátí seznam kanadských měst v tabulce -
sežazený seznam roků a měsíců, ve kterých v kanadě proběhl nějaký útok
SELECT DISTINCT IYEAR, IMONTH FROM TEROR WHERE COUNTRY_TXT = 'Canada' ORCER BY IYEAR, IMONTH; -- vrátí sežazený seznam roků a měsíců, ve kterých v kanadě proběhl nějaký útok
Počet řádek odpovídajících podmínce COUNT(*)
-
počet všech řádek v tabulce
SELECT COUNT(1) FROM TEROR; -- vrátí počet všech řádek v tabulce -
počet útoků (řádek) v Kanadě
SELECT COUNT(*) FROM TEROR WHERE COUNTRY_TXT = 'Canada'; -- vrátí počet útoků (řádek) v Kanadě -
počet útoků (řádek) v Kanadě v roce 2019
SELECT COUNT(1) FROM TEROR WHERE COUNTRY_TXT = 'Canada' AND IYEAR = 2019 ORCER BY IYEAR, IMONTH; -- vrátí počet útoků (řádek) v Kanadě v roce 2019
A teď se podíváme, co na to robot, jak by nás to učil?
-
vysvětlení základů docela trefí
Základy s chatGPT -
vysvětlení konkrétní odrážky z lekce
SELECT, FROM, WHERE -
a když nám to nestačí
Složitější příklady -
a můžeme mu dát i větší kusy
Složitější příklady -
nebo ho nechat shrnout celou lekci (screenshot je trochu zkrácený, lekce je celkem dlouhá)
Shrnutí lekce -
Něco odpoví
Shrnutí lekce -
A když se nám to nelíbí, protě ho to necháme zkusit znova, napodruhé těžko říct, jestli lepší, ale jiná odpověď to určitě je
Shrnutí lekce