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
(
y expr1
<> 0
), expr1
NO ES NULOIF()
devuelve expr2
. De lo contrario, devuelve expr3
.
Tipo de devolución
- Si
expr2
oexpr3
producir una cadena, el resultado es una cadena. Siexpr2
yexpr3
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
oexpr3
produce un valor de punto flotante, el resultado es un valor de punto flotante. - Si
expr2
oexpr3
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.