MySQL heeft een IF()
functie die een gemakkelijke manier biedt om een eenvoudige "IF/ELSE"-bewerking uit te voeren.
Het werkt vergelijkbaar met een standaard IF
/ELSE
statement, in die zin dat het ons in staat stelt om te controleren op een voorwaarde en een ander resultaat te retourneren, afhankelijk van of het waar is of niet.
Meer specifiek, als het eerste argument voor de IF()
functie waar is, wordt het tweede argument geretourneerd. Als het niet waar is, wordt het derde argument geretourneerd.
Syntaxis
IF(expr1,expr2,expr3)
Als expr1
is TRUE
(
en expr1
<> 0
), expr1
IS NIET NULLIF()
retourneert expr2
. Anders retourneert het expr3
.
Retourtype
- Als
expr2
ofexpr3
een string produceren, is het resultaat een string. Alsexpr2
enexpr3
zijn beide tekenreeksen en elke tekenreeks is hoofdlettergevoelig, het resultaat is hoofdlettergevoelig. - Als
expr2
ofexpr3
een drijvende-kommawaarde produceren, is het resultaat een drijvende-kommawaarde. - Als
expr2
ofexpr3
een geheel getal produceren, het resultaat is een geheel getal.
Voorbeeld
Hier is een eenvoudig voorbeeld om te demonstreren hoe het werkt:
SELECT IF( 1 > 2, 'Yes', 'No' );
Resultaat:
No
Hier hebben we gecontroleerd of 1 groter is dan 2. Dat is niet zo, en dus werd het derde argument geretourneerd.
Dit is wat er gebeurt als de eerste uitdrukking waar is:
SELECT IF( 2 > 1, 'Yes', 'No' );
Resultaat:
Yes
Databasevoorbeeld
Hier is een voorbeeld dat de IF()
. gebruikt functie bij het opvragen van een database:
SELECT
Name,
Population,
IF( Population > 10000000, 'Big', 'Small' ) AS "Big/Small"
FROM Country
ORDER BY Name ASC
LIMIT 10;
Resultaat:
+---------------------+------------+-----------+ | Name | Population | Big/Small | +---------------------+------------+-----------+ | Afghanistan | 22720000 | Big | | Albania | 3401200 | Small | | Algeria | 31471000 | Big | | American Samoa | 68000 | Small | | Andorra | 78000 | Small | | Angola | 12878000 | Big | | Anguilla | 8000 | Small | | Antarctica | 0 | Small | | Antigua and Barbuda | 68000 | Small | | Argentina | 37032000 | Big | +---------------------+------------+-----------+
Genest IF()
Functies
Het is mogelijk om IF()
. te nesten functies om voor meer dan een binaire uitkomst te zorgen.
Bijvoorbeeld:
SELECT
Name,
Population,
IF(
Population > 10000000,
IF( Population > 100000000, 'REALLY Big', 'Big' ),
'Small'
) AS "Size"
FROM Country
WHERE Region = 'Southern and Central Asia'
ORDER BY Population DESC;
Resultaat:
+--------------+------------+------------+ | Name | Population | Size | +--------------+------------+------------+ | India | 1013662000 | REALLY Big | | Pakistan | 156483000 | REALLY Big | | Bangladesh | 129155000 | REALLY Big | | Iran | 67702000 | Big | | Uzbekistan | 24318000 | Big | | Nepal | 23930000 | Big | | Afghanistan | 22720000 | Big | | Sri Lanka | 18827000 | Big | | Kazakstan | 16223000 | Big | | Tajikistan | 6188000 | Small | | Kyrgyzstan | 4699000 | Small | | Turkmenistan | 4459000 | Small | | Bhutan | 2124000 | Small | | Maldives | 286000 | Small | +--------------+------------+------------+
Nulls en nullen
Als de eerste expressie NULL
. is of 0
, dan is het onwaar en wordt de tweede waarde geretourneerd:
SELECT
IF( 1, 'True', 'False' ) AS "1",
IF( null, 'True', 'False' ) AS "Null",
IF( 0, 'True', 'False' ) AS "Zero";
Resultaat:
+------+-------+-------+ | 1 | Null | Zero | +------+-------+-------+ | True | False | False | +------+-------+-------+
Hier is de eerste kolom waar omdat deze wordt omgezet in 1. De andere twee kolommen retourneren het tweede argument, omdat hun eerste argument null
was. en 0
respectievelijk.
Hier is een databasevoorbeeld:
SELECT
Name,
GNPOld,
IF( GNPOld, GNPOld, 'None' )
FROM Country
ORDER BY Name ASC
LIMIT 10;
Resultaat:
+---------------------+-----------+------------------------------+ | Name | GNPOld | IF( GNPOld, GNPOld, 'None' ) | +---------------------+-----------+------------------------------+ | Afghanistan | NULL | None | | Albania | 2500.00 | 2500.00 | | Algeria | 46966.00 | 46966.00 | | American Samoa | NULL | None | | Andorra | NULL | None | | Angola | 7984.00 | 7984.00 | | Anguilla | NULL | None | | Antarctica | NULL | None | | Antigua and Barbuda | 584.00 | 584.00 | | Argentina | 323310.00 | 323310.00 | +---------------------+-----------+------------------------------+
Hoewel in dit geval hetzelfde resultaat had kunnen worden bereikt met iets minder code met behulp van de IFNULL()
functie of zelfs de COALESCE()
functie.