Většina hlavních DBMS nám poskytuje funkci pro nahrazení hodnot null jinou hodnotou.
Ale název funkce má tendenci se lišit v různých DBMS. Například SQL Server má ISNULL()
funkce, zatímco jiné (jako MySQL, MariaDB a SQLite) mají IFNULL()
funkce pro totéž.
Abychom to však zamotali, MySQL a MariaDB mají každý ISNULL()
funkce, která funguje odlišně od funkce SQL Serveru se stejným názvem (implementace MySQL a MariaDB přijímá pouze jeden argument a vrací 1
pokud je jeho null
a 0
pokud tomu tak není).
Každopádně v případě Oracle Database můžeme použít NVL()
funkce k nahrazení hodnot null jinou hodnotou.
Oracle Database má ve skutečnosti také NVL2()
funkce, která nám umožňuje poskytnout jinou hodnotu, kterou použijeme v případě, že první argument není null
.
Pokud chceme jednoduše otestovat, zda je hodnota null
nebo ne, můžeme použít IS NULL
podmínka (nebo IS NOT NULL
pro opačný test).
NVL()
Funkce
Zde je příklad, který ukazuje, jak NVL()
funkce funguje:
SELECT NVL(null, 'Run')
FROM DUAL;
Výsledek:
Run
V tomto případě byl první argument null
a tak byl vrácen druhý argument.
Co se stane, když první argument není null
:
SELECT NVL('Walk', 'Run')
FROM DUAL;
Výsledek:
Walk
Je vrácen první argument.
NVL2()
Funkce
Jak již bylo zmíněno, Oracle Database nám také poskytuje NVL2()
funkce. Tato funkce nám umožňuje poskytnout jinou hodnotu, která se použije v případě, že první argument není null
.
Zde je příklad, jak to funguje:
SELECT NVL2(null, 2, 3)
FROM DUAL;
Výsledek:
3
První argument byl null
a tak byl vrácen třetí argument.
Co se stane, když první argument není null
:
SELECT NVL2(1, 2, 3)
FROM DUAL;
Výsledek:
2
Je vrácen druhý argument.
Položka IS NULL
a IS NOT NULL
Podmínky
Chceme-li pouze zjistit, zda je hodnota null
nebo ne , můžeme použít IS NULL
srovnávací podmínka. Alternativně můžeme použít IS NOT NULL
zkontrolujte, zda není null
.
Předpokládejme, že máme následující tabulku:
SELECT * FROM Autoparts
WHERE Price IS NULL;
Výsledek:
ID | OE# | PRICE | MODEL |
---|---|---|---|
2 | 62150B3278 | – | CAMRY |
1 | 62150A3278 | 168 | HILUX |
V tomto případě PRICE
obsahuje nulovou hodnotu pro první řádek, ale nikoli pro druhý řádek.
Zde je příklad použití IS NULL
proti této tabulce:
SELECT * FROM Autoparts
WHERE Price IS NULL;
Výsledek:
ID | OE# | PRICE | MODEL |
---|---|---|---|
2 | 62150B3278 | – | CAMRY |
Vrátí se pouze řádek s nulovou cenou.
Zde je to, co se stane, když použijeme IS NOT NULL
:
SELECT * FROM Autoparts
WHERE Price IS NOT NULL;
Výsledek:
ID | OE# | PRICE | MODEL |
---|---|---|---|
1 | 62150A3278 | 168 | HILUX |
Vrátí se druhý řádek.