sql >> Base de Datos >  >> RDS >> Mysql

Explicación de la función IF() de MySQL

MySQL tiene un IF() función que proporciona una manera conveniente de realizar una operación simple "IF/ELSE".

Funciona de forma similar a un IF básico /ELSE declaración, en la que nos permite verificar una condición y devolver un resultado diferente dependiendo de si es cierto o no.

Más específicamente, si el primer argumento del IF() la función es verdadera, se devuelve el segundo argumento. Si no es cierto, se devuelve el tercer argumento.

Sintaxis

IF(expr1,expr2,expr3)

Si expr1 es TRUE (expr1 <> 0expr1 NO ES NULO ), IF() devuelve expr2 . De lo contrario, devuelve expr3 .

Tipo de devolución

  • Si expr2 o expr3 producir una cadena, el resultado es una cadena. Si expr2 y expr3 son cadenas y cualquiera de las cadenas distingue entre mayúsculas y minúsculas, el resultado distingue entre mayúsculas y minúsculas.
  • Si expr2 o expr3 produce un valor de punto flotante, el resultado es un valor de punto flotante.
  • Si expr2 o expr3 produce un número entero, el resultado es un número entero.

Ejemplo

Aquí hay un ejemplo simple para demostrar cómo funciona:

SELECT IF( 1 > 2, 'Yes', 'No' );

Resultado:

No

Aquí, verificamos si 1 es mayor que 2 o no. No lo es, por lo que se devolvió el tercer argumento.

Esto es lo que sucede cuando la primera expresión es verdadera:

SELECT IF( 2 > 1, 'Yes', 'No' );

Resultado:

Yes

Ejemplo de base de datos

Aquí hay un ejemplo que usa el IF() función al consultar una base de datos:

SELECT 
    Name,
    Population,
    IF( Population > 10000000, 'Big', 'Small' ) AS "Big/Small"
FROM Country
ORDER BY Name ASC
LIMIT 10;

Resultado:

+---------------------+------------+-----------+
| 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() anidado Funciones

Es posible anidar IF() funciones para proporcionar más que un resultado binario.

Por ejemplo:

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;

Resultado:

+--------------+------------+------------+
| 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      |
+--------------+------------+------------+

Nulos y ceros

Si la primera expresión es NULL o 0 , entonces es falso y se devuelve el segundo valor:

SELECT
    IF( 1, 'True', 'False' ) AS "1",
    IF( null, 'True', 'False' ) AS "Null",
    IF( 0, 'True', 'False' ) AS "Zero";

Resultado:

+------+-------+-------+
| 1    | Null  | Zero  |
+------+-------+-------+
| True | False | False |
+------+-------+-------+

Aquí, la primera columna es verdadera porque se resuelve en 1. Las otras dos columnas devuelven el segundo argumento, porque su primer argumento era null y 0 respectivamente.

Aquí hay un ejemplo de base de datos:

SELECT 
    Name,
    GNPOld,
    IF( GNPOld, GNPOld, 'None' )
FROM Country
ORDER BY Name ASC
LIMIT 10;

Resultado:

+---------------------+-----------+------------------------------+
| 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                    |
+---------------------+-----------+------------------------------+

Aunque en este caso se podría haber logrado el mismo resultado con un poco menos de código utilizando IFNULL() función o incluso el COALESCE() función.