sql >> Database >  >> RDS >> MariaDB

Hoe IFNULL() werkt in MariaDB

In MariaDB, de IFNULL() functie stelt ons in staat om NULL-waarden te vervangen door een andere waarde.

Syntaxis

IFNULL(expr1,expr2)

Als expr1 is niet NULL , IFNULL() retourneert expr1 ; anders retourneert het expr2 .

Ook van MariaDB 10.3, NVL() kan worden gebruikt als een alias voor de IFNULL() functie. Daarom hebben we de mogelijkheid om in plaats daarvan de volgende syntaxis te gebruiken:

NVL(expr1,expr2)

Het resultaat is hetzelfde, ongeacht welke syntaxis wordt gebruikt.

Voorbeeld

Hier is een eenvoudig voorbeeld dat de NULL . gebruikt constante:

SELECT IFNULL( null, 'No Value' );

Resultaat:

No Value

In dit geval gebruikte ik IFNULL() om de NULL-waarde te vervangen door No Value .

Dit is wat er gebeurt als het eerste argument niet NULL is :

SELECT IFNULL( 'Spicy', 'No Value' );

Resultaat:

Spicy

In dit geval wordt het eerste argument geretourneerd, omdat het niet NULL . is .

Databasevoorbeeld

Stel dat we de volgende query uitvoeren:

SELECT * FROM Employees;

Resultaat:

empId	name	dept
-----   -----   -----
1	Jess	Sales
2	Rohit	NULL
3	Zohan	Sales
4	Homer	NULL

We kunnen zien dat twee rijen NULL-waarden hebben in de dept kolom.

In de volgende query gebruiken we IFNULL() om de NULL-waarden te vervangen door een meer betekenisvolle waarde voor de lezer:

SELECT
    empId,
    name,
    IFNULL( dept, 'Not yet assigned' ) AS dept
FROM Employees;

Resultaat:

empId	name	dept
-----   -----   ----------------
1	Jess	Sales
2	Rohit	Not yet assigned
3	Zohan	Sales
4	Homer	Not yet assigned

Uitdrukkingen

De huidige waarde van het eerste argument wordt geëvalueerd. Daarom, als we een uitdrukking als de volgende leveren:

SELECT IFNULL( 3 * 7, 0 );

We krijgen dit:

21

We krijgen dus niet de 3 * 7 deel. We krijgen het resultaat van die uitdrukking (in dit geval 21 ).

Hetzelfde geldt wanneer het resultaat van de expressie NULL . is . Als we bijvoorbeeld de volgende code uitvoeren:

SELECT IFNULL( 3 / 0, 0 );

We krijgen dit:

0.0000

Dit is echter een gevaarlijk voorbeeld. Nul is een waarde. NULL is niet.

Het retourneren van nul wanneer er een NULL-waarde is, kan misleidend of zelfs helemaal verkeerd zijn. Stel je voor dat we te maken hadden met prijzen. We kunnen eindigen met een prijs van nul, wat onjuist kan zijn en het bedrijf veel geld kan kosten.

Daarom is het in dergelijke gevallen meestal beter om een ​​betekenisvollere waarde te gebruiken die de lezer duidelijk maakt dat er geen waarde is.

Voorbeeld:

SELECT IFNULL( 3 / 0, 'No value' );

Resultaat:

No Value

De NVL() Functie

Beginnend met MariaDB 10.3, NVL() is een alias voor IFNULL() . Daarom kunnen we IFNULL() . vervangen met NVL() in een van de bovenstaande voorbeelden.

Voorbeeld:

SELECT NVL( 3 / 0, 'No value' );

Resultaat:

No Value

  1. Fout:Geen module met de naam psycopg2.extensions

  2. SQL Server:Isolatieniveau lekken over gepoolde verbindingen

  3. ORA-01008:niet alle variabelen zijn gebonden. Ze zijn gebonden

  4. Reguliere expressie in PostgreSQL LIKE-clausule