Zatímco většina aplikací bude mít nějakou formu technologie na straně serveru nebo dokonce na straně klienta, kterou lze použít k odfiltrování výsledků databázových dotazů, které mohou obsahovat NULL
nebo prázdné hodnoty, použití jiného jazyka a tato další zátěž související s prováděním kódu je pro server obvykle nákladnější a ve skutečnosti z velké části zbytečná.
Namísto toho níže stručně prozkoumáme, jak k provedení tohoto úkolu použít samotný engine MySQL, přičemž pořídíme pouze záznamy, které si přejete, a vyloučíme ty s otravným NULL
sloupce v mixu.
NENÍ NULL operátor porovnání
Zdaleka nejjednodušší a nejpřímější metoda, jak zajistit, aby sada výsledků konkrétního sloupce neobsahovala NULL
hodnoty je použít IS NOT NULL
operátor porovnání.
Například pokud chceme vybrat všechny záznamy v našich books
tabulka, kde je primary_author
sloupec není NULL
, dotaz může vypadat takto:
SELECT
primary_author,
published_date,
title
FROM
books
WHERE
primary_author IS NOT NULL;
Protože IS NOT NULL
chová se stejně jako jakýkoli jiný komparátor, lze jej kombinovat s dalšími WHERE
klauzule k dalšímu filtrování výsledků, stejně jako byste používali =
, >
, <
, LIKE
a další standardní porovnávací operátory.
Filtrování hodnoty NULL z více sloupců
V některých případech můžete chtít načíst výsledky, kde ne NULL
hodnoty jsou přítomny ve více sloupcích. Některé záznamy máme například v books
tabulka:
id | title | primary_author | published_date
1 | The Hobbit | Tolkien | 09-21-1937
2 | The Silmarillion | Tolkien | 09-15-1977
3 | The Name of the Wind | Rothfuss | 03-27-2007
4 | The Wise Man's Fear | Rothfuss | 03-01-2011
5 | The Doors of Stone | Rothfuss | NULL
6 | Beowulf | NULL | 01-01-1000
Vezměte na vědomí, že The Doors of Stone (id 5
) není publikován, a proto je published_date
je NULL
. Podobně Beowulf (id 6
) – slavná staroanglická epická báseň – nemá známého autora, takže primary_author
je NULL
.
V tomto případě můžeme chtít dotaz na výsledky obsahující pouze první čtyři záznamy, čímž se vyloučí poslední dva záznamy, které mají NULL
hodnoty v primary_author
nebo published_date
. To lze provést pomocí tohoto jednoduchého příkazu pomocí AND
s více operátory porovnání:
SELECT
primary_author,
published_date,
title
FROM
books
WHERE
(
primary_author IS NOT NULL
AND
published_date IS NOT NULL
);
Poznámka:Závorky nejsou povinné, ale pro lepší čitelnost je dobré vložit seskupené komparátory.
Tady to máš; jednoduchý operátor porovnání, který lze použít k odfiltrování všech NULL
hodnoty ve vašich záznamech.