MySQL tem um
IF() função que fornece uma maneira conveniente de realizar uma operação simples “IF/ELSE”. Funciona de maneira semelhante a um
IF básico /ELSE declaração, na medida em que nos permite verificar uma condição e retornar um resultado diferente dependendo se é verdadeiro ou não. Mais especificamente, se o primeiro argumento para
IF() for true, o segundo argumento será retornado. Se não for verdade, o terceiro argumento é retornado. Sintaxe
IF(expr1,expr2,expr3) Se
expr1 é TRUE (expr1 <> 0 e expr1 NÃO É NULO ), IF() retorna expr2 . Caso contrário, ele retornará expr3 . Tipo de retorno
- Se
expr2ouexpr3produzir uma string, o resultado é uma string. Seexpr2eexpr3são ambas strings e qualquer string diferencia maiúsculas de minúsculas, o resultado diferencia maiúsculas de minúsculas. - Se
expr2ouexpr3produzir um valor de ponto flutuante, o resultado será um valor de ponto flutuante. - Se
expr2ouexpr3produzir um inteiro, o resultado será um inteiro.
Exemplo
Aqui está um exemplo simples para demonstrar como funciona:
SELECT IF( 1 > 2, 'Yes', 'No' ); Resultado:
No
Aqui, verificamos se 1 é maior que 2. Não é, então o terceiro argumento foi retornado.
Aqui está o que acontece quando a primeira expressão é verdadeira:
SELECT IF( 2 > 1, 'Yes', 'No' ); Resultado:
Yes
Exemplo de banco de dados
Aqui está um exemplo que usa o
IF() função ao consultar um banco de dados: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 | +---------------------+------------+-----------+
Aninhado IF() Funções
É possível aninhar
IF() funções para fornecer mais do que um resultado binário. Por exemplo:
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 e Zeros
Se a primeira expressão for
NULL ou 0 , então é falso e o segundo valor é retornado: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 | +------+-------+-------+
Aqui, a primeira coluna é verdadeira porque resolve para 1. As outras duas colunas retornam o segundo argumento, porque o primeiro argumento foi
null e 0 respectivamente. Aqui está um exemplo de banco de dados:
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 | +---------------------+-----------+------------------------------+
Embora neste caso o mesmo resultado pudesse ser alcançado com um pouco menos de código usando o
IFNULL() função ou mesmo a função COALESCE() função.