MySQL a un IF()
fonction qui fournit un moyen pratique d'effectuer une simple opération "IF/ELSE".
Cela fonctionne comme un IF
de base /ELSE
déclaration, en ce sens qu'elle nous permet de vérifier une condition et de renvoyer un résultat différent selon qu'elle est vraie ou non.
Plus précisément, si le premier argument du IF()
fonction est vraie, le deuxième argument est renvoyé. Si ce n'est pas vrai, le troisième argument est renvoyé.
Syntaxe
IF(expr1,expr2,expr3)
Si expr1
est TRUE
(
et expr1
<> 0
), expr1
N'EST PAS NULLIF()
renvoie expr2
. Sinon, il renvoie expr3
.
Type de retour
- Si
expr2
ouexpr3
produire une chaîne, le résultat est une chaîne. Siexpr2
etexpr3
sont les deux chaînes et que l'une ou l'autre des chaînes est sensible à la casse, le résultat est sensible à la casse. - Si
expr2
ouexpr3
produire une valeur à virgule flottante, le résultat est une valeur à virgule flottante. - Si
expr2
ouexpr3
produire un entier, le résultat est un entier.
Exemple
Voici un exemple simple pour illustrer son fonctionnement :
SELECT IF( 1 > 2, 'Yes', 'No' );
Résultat :
No
Ici, nous avons vérifié si 1 est supérieur ou non à 2. Ce n'est pas le cas, et le troisième argument a donc été renvoyé.
Voici ce qui se passe lorsque la première expression est vraie :
SELECT IF( 2 > 1, 'Yes', 'No' );
Résultat :
Yes
Exemple de base de données
Voici un exemple qui utilise le IF()
fonction lors de l'interrogation d'une base de données :
SELECT
Name,
Population,
IF( Population > 10000000, 'Big', 'Small' ) AS "Big/Small"
FROM Country
ORDER BY Name ASC
LIMIT 10;
Résultat :
+---------------------+------------+-----------+ | 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 | +---------------------+------------+-----------+
IF()
imbriqué Fonctions
Il est possible d'imbriquer IF()
fonctions afin de fournir plus qu'un résultat binaire.
Par exemple :
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;
Résultat :
+--------------+------------+------------+ | 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 | +--------------+------------+------------+
Nuls et zéros
Si la première expression est soit NULL
ou 0
, alors c'est faux, et la seconde valeur est renvoyée :
SELECT
IF( 1, 'True', 'False' ) AS "1",
IF( null, 'True', 'False' ) AS "Null",
IF( 0, 'True', 'False' ) AS "Zero";
Résultat :
+------+-------+-------+ | 1 | Null | Zero | +------+-------+-------+ | True | False | False | +------+-------+-------+
Ici, la première colonne est vraie car elle se résout en 1. Les deux autres colonnes renvoient le deuxième argument, car leur premier argument était null
et 0
respectivement.
Voici un exemple de base de données :
SELECT
Name,
GNPOld,
IF( GNPOld, GNPOld, 'None' )
FROM Country
ORDER BY Name ASC
LIMIT 10;
Résultat :
+---------------------+-----------+------------------------------+ | 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 | +---------------------+-----------+------------------------------+
Bien que dans ce cas, le même résultat aurait pu être obtenu avec un peu moins de code en utilisant IFNULL()
ou encore la fonction COALESCE()
fonction.