Když se ve školní kanceláři zeptáš „Kdo chodí do 2.A?“, sekretářka projde kartotéku a přečte ti jména. Databázi se ptáš stejně, jen přesnou větou v jazyce SQL. Té větě se říká dotaz.
Nejčastější dotaz začíná slovem SELECT (vyber). Používá ho každý web, který ti něco ukazuje: seznam zboží, výsledky hledání, tvoje známky.
SELECT jmeno FROM zaci;SELECT … FROM …Za SELECT napíšeš sloupce, které chceš vidět, za FROM tabulku. Hvězdička * znamená všechny sloupce.SELECT jmeno, prijmeni FROM zaci;WHEREPodmínka, která vybere jen některé řádky. Textové hodnoty se píšou do jednoduchých apostrofů.WHERE trida = '2.A'| id | jmeno | prijmeni | trida | rok_narozeni |
|---|---|---|---|---|
| 1 | Eva | Malá | 2.A | 2009 |
| 2 | Petr | Novák | 2.A | 2008 |
| 3 | Jana | Svobodová | 3.B | 2008 |
| 4 | Tomáš | Černý | 3.B | 2007 |
| 5 | Lucie | Malá | 1.C | 2010 |
SELECT jmeno, prijmeniFROM zaciWHERE trida = '2.A';Výsledek: Eva Malá a Petr Novák. SŘBD vezme tabulku zaci (FROM), nechá jen řádky třídy 2.A (WHERE) a ukáže dva sloupce (SELECT).
| Operátor | Význam | Příklad |
|---|---|---|
= | rovná se | trida = '3.B' |
<> (nebo !=) | nerovná se | trida <> '1.C' |
< > <= >= | menší, větší… | rok_narozeni >= 2009 |
AND, OR, NOT | a zároveň, nebo, negace | trida = '2.A' AND rok_narozeni = 2008 |
SELECT * FROM zaci WHERE rok_narozeni < 2009; Vrátí Petra (2008), Janu (2008) a Tomáše (2007), tedy 3 řádky.SELECT jmeno FROM zaci WHERE trida = '3.B' OR rok_narozeni = 2010;?OR stačí jedna podmínka, celkem 3 řádky.SELECT * FROM zaci WHERE trida = 2.A;SELECT * FROM zaci WHERE trida = '2.A';Text musí být v jednoduchých apostrofech. Bez nich SŘBD nerozumí, co je 2.A, a ohlásí chybu.
SELECT sloupce FROM tabulka WHERE podmínka; vybere ze zadané tabulky řádky, které splňují podmínku, a ukáže zvolené sloupce. Text patří do apostrofů, * znamená všechny sloupce.Na e-shopu filtruješ: cena od 500 do 1 000 Kč, značka Nike nebo Adidas, název obsahuje „mikina“. Každý takový filtr se v databázi změní v podmínku za WHERE. SQL na to má pohodlné operátory.
Naučíš se BETWEEN, IN, LIKE, IS NULL, odstranění duplicit a přejmenování sloupců. Pracujeme se stejnou tabulkou žáků.
SELECT sloupce FROM tabulka WHERE podmínka; – vybere řádky splňující podmínku a zobrazí dané sloupce.SELECT jmeno FROM zaci WHERE trida = '2.A';BETWEEN a AND bHodnota leží v rozsahu od a do b včetně obou krajů.rok_narozeni BETWEEN 2008 AND 2009IN (…)Hodnota je jedna z vyjmenovaných.trida IN ('2.A', '1.C')LIKE a zástupné znakyPorovnání textu se vzorem. % zastoupí libovolný počet znaků (i žádný), _ právě jeden znak.prijmeni LIKE 'M%' = příjmení začíná na M.IS NULLTest, jestli hodnota chybí. S NULL nefunguje =, protože NULL není hodnota, ale „neznámo“.WHERE telefon IS NULLDISTINCT a ASDISTINCT odstraní z výsledku opakující se řádky. AS dá sloupci ve výsledku jiný název (alias).SELECT DISTINCT trida AS skupina FROM zaci;| id | jmeno | prijmeni | trida | rok_narozeni |
|---|---|---|---|---|
| 1 | Eva | Malá | 2.A | 2009 |
| 2 | Petr | Novák | 2.A | 2008 |
| 3 | Jana | Svobodová | 3.B | 2008 |
| 4 | Tomáš | Černý | 3.B | 2007 |
| 5 | Lucie | Malá | 1.C | 2010 |
Dotaz (za SELECT jmeno FROM zaci) | Výsledek |
|---|---|
WHERE rok_narozeni BETWEEN 2008 AND 2009 | Eva, Petr, Jana |
WHERE trida IN ('2.A', '1.C') | Eva, Petr, Lucie |
WHERE prijmeni LIKE 'M%' | Eva, Lucie |
WHERE prijmeni LIKE '%ová' | Jana |
WHERE NOT trida = '2.A' | Jana, Tomáš, Lucie |
FROM: SŘBD vezme tabulku.WHERE: nechá jen řádky, které splňují podmínku.SELECT: vybere sloupce a spočítá výrazy.DISTINCT: odstraní opakované řádky výsledku.Proto nemůžeš ve WHERE použít alias z SELECT: v okamžiku, kdy se vyhodnocuje WHERE, ještě neexistuje.
SELECT DISTINCT trida FROM zaci;?DISTINCT duplicity odstraní: 2.A, 3.B, 1.C, tedy 3 řádky.SELECT * FROM zaci WHERE trida = '2.A' OR trida = '3.B' AND rok_narozeni = 2007;?AND má přednost před OR. Podmínka je: 2.A, nebo (3.B a zároveň 2007). 2.A: Eva, Petr. 3.B a 2007: Tomáš. Celkem 3. Se závorkami (trida = '2.A' OR trida = '3.B') AND rok_narozeni = 2007 by vyšel jen Tomáš.WHERE telefon = NULLWHERE telefon IS NULLPorovnání s NULL přes = nikdy nevrátí pravdu, výsledek je „neznámo“. Proto dotaz nevrátí ani jeden řádek.
BETWEEN testuje rozsah včetně krajů, IN výčet, LIKE vzor s % a _, IS NULL chybějící hodnotu. DISTINCT odstraní duplicity, AS přejmenuje sloupec. AND má přednost před OR.