Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Função MySQL IF() explicada


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 <> 0expr1 NÃO É NULO ), IF() retorna expr2 . Caso contrário, ele retornará expr3 .

Tipo de retorno

  • Se expr2 ou expr3 produzir uma string, o resultado é uma string. Se expr2 e expr3 são ambas strings e qualquer string diferencia maiúsculas de minúsculas, o resultado diferencia maiúsculas de minúsculas.
  • Se expr2 ou expr3 produzir um valor de ponto flutuante, o resultado será um valor de ponto flutuante.
  • Se expr2 ou expr3 produzir 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.