Chybějící hodnoty: NULL
NULL znáte z první lekce: znamená, že hodnota chybí. Obchod nezná město Anny Kučerové a Robot Rebellion zatím nemá datum vydání. Když chcete takové řádky najít, nabízí se napsat = NULL. Tento dotaz ale nenajde nic:
SELECT jmeno, mesto
FROM zakaznici
WHERE mesto = NULL;| jmeno | mesto |
|---|
To není chyba v datech. NULL znamená „neznámo“ a porovnání čehokoli s neznámou hodnotou dá neznámý výsledek. Rovná se Praha nějakému neznámému městu? To nikdo neví. Takové porovnání není pravda ani nepravda, jeho výsledek je zase NULL. A WHERE si nechá jen řádky, pro které podmínka platí. Neplatí ani NULL = NULL: jsou dvě neznámá města stejná? Zase neznámo. Můžete si to vyzkoušet: SELECT bez FROM nečte žádnou tabulku, jen spočítá hodnoty, které napíšete, a ukáže je v jednom řádku:
SELECT 5 = NULL, NULL = NULL;| 5 = NULL | NULL = NULL |
|---|---|
| NULL | NULL |
Proto má SQL pro chybějící hodnoty zvláštní operátor, IS NULL (je NULL). Hry, které ještě nevyšly:
SELECT nazev, vydano
FROM hry
WHERE vydano IS NULL
ORDER BY nazev;| nazev | vydano |
|---|---|
| Mystery Manor | NULL |
| Robot Rebellion | NULL |
Jeho opakem je IS NOT NULL, tedy řádky, které hodnotu mají: WHERE vydano IS NOT NULL najde 18 her, které už vyšly.
Totéž platí pro všechna ostatní porovnání, i pro <>. Kteří zákazníci nejsou z Prahy?
SELECT jmeno, mesto
FROM zakaznici
WHERE mesto <> 'Praha'
ORDER BY jmeno;| jmeno | mesto |
|---|---|
| Jakub Dvořák | Brno |
| Klára Horáková | Plzeň |
| Kristýna Fialová | Brno |
| … | … |
Anna Kučerová a Filip Beneš ve výsledku nejsou. Je neznámé město jiné než Praha? Zase neznámo. Pokud je chcete také, musíte si o ně říct: mesto <> 'Praha' OR mesto IS NULL.
Typická chyba: = NULL místo IS NULL. SQLite to nepovažuje za chybu, takže vás nevaruje; dotaz prostě nic nenajde. Kdykoli hledáte chybějící hodnoty, pište IS NULL.
Jak psát:
Pokyny
Dotaz v editoru má ukázat jméno a e-mail zákazníků, kteří nemají vyplněné město, ale nenajde nic. Opravte ho:
| jmeno | |
|---|---|
| Anna Kučerová | anna.kucerova@mail.cz |
| Filip Beneš | filip@benes.dev |
Pod něj přidejte dotaz, který ukáže ID hry, hvězdičky a komentář pětihvězdičkových recenzí, které mají komentář, seřazené podle ID hry:
| hra_id | hvezdicky | komentar |
|---|---|---|
| 1 | 5 | Nejlepší RPG, jaké jsem za poslední roky hrál! |
| 3 | 5 | Krásně uklidňující. |
| 6 | 5 | Ideální do autobusu. |
| 7 | 5 | Úžasné vesmírné bitvy. |
| 14 | 5 | Rychlé a zábavné. |
| 15 | 5 | Stojí za každou korunu. |
Obchod píše zpravodaj o nových hrách: o těch, které vyšly v roce 2025 nebo později, a o těch, které ještě nevyšly. Ukažte jejich název a datum vydání, seřazené podle data vydání a pak podle názvu:
| nazev | vydano |
|---|---|
| Mystery Manor | NULL |
| Robot Rebellion | NULL |
| Star Pilots | 2025-01-23 |
| Turbo Karts | 2025-06-05 |
| Goal Rush | 2025-09-26 |
| Knight's Oath | 2025-11-14 |
Začněte programovat zdarma
11/12