Mysql
 sql >> Base de données >  >> RDS >> Mysql

Explication de la fonction MySQL IF()

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 (expr1 <> 0 et expr1 N'EST PAS NULL ), IF() renvoie expr2 . Sinon, il renvoie expr3 .

Type de retour

  • Si expr2 ou expr3 produire une chaîne, le résultat est une chaîne. Si expr2 et expr3 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 ou expr3 produire une valeur à virgule flottante, le résultat est une valeur à virgule flottante.
  • Si expr2 ou expr3 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.