sql >> Databáze >  >> RDS >> Mysql

Vysvětlení funkce MySQL IF().

MySQL má IF() funkce, která poskytuje pohodlný způsob provedení jednoduché operace „IF/ELSE“.

Funguje podobně jako základní IF /ELSE v tom, že nám umožňuje zkontrolovat podmínku a vrátit jiný výsledek v závislosti na tom, zda je pravdivá nebo ne.

Přesněji, pokud je prvním argumentem IF() má funkce true, vrátí se druhý argument. Pokud to není pravda, vrátí se třetí argument.

Syntaxe

IF(expr1,expr2,expr3)

Pokud expr1 je TRUE (expr1 <> 0expr1 NENÍ NULL ), IF() vrátí expr2 . V opačném případě vrátí expr3 .

Typ návratu

  • Pokud expr2 nebo expr3 vytvořit řetězec, výsledkem je řetězec. Pokud expr2 a expr3 jsou oba řetězce a každý řetězec rozlišuje malá a velká písmena, výsledek rozlišuje malá a velká písmena.
  • Pokud expr2 nebo expr3 vytvořit hodnotu s plovoucí desetinnou čárkou, výsledkem je hodnota s plovoucí desetinnou čárkou.
  • Pokud expr2 nebo expr3 vytvoříte celé číslo, výsledkem je celé číslo.

Příklad

Zde je jednoduchý příklad, který demonstruje, jak to funguje:

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

Výsledek:

No

Zde jsme zkontrolovali, zda 1 je nebo není větší než 2. Není, a tak byl vrácen třetí argument.

Co se stane, když je první výraz pravdivý:

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

Výsledek:

Yes

Příklad databáze

Zde je příklad, který používá IF() funkce při dotazu na databázi:

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

Výsledek:

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

Vnořeno IF() Funkce

Je možné vnořit IF() funkce s cílem poskytnout více než binární výsledek.

Například:

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;

Výsledek:

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

Nuly a nuly

Pokud je první výraz buď NULL nebo 0 , pak je to nepravda a je vrácena druhá hodnota:

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

Výsledek:

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

Zde je první sloupec pravdivý, protože se vyhodnotí jako 1. Další dva sloupce vrátí druhý argument, protože jejich první argument byl null a 0 respektive.

Zde je příklad databáze:

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

Výsledek:

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

I když v tomto případě bylo možné stejného výsledku dosáhnout s o něco menším množstvím kódu pomocí IFNULL() nebo dokonce COALESCE() funkce.


  1. SQL LIKE operátor pro začátečníky

  2. Jak mohu vybrat celý řádek, který má největší ID v tabulce?

  3. Jak přepnout databáze v postgresu?

  4. cx_Oracle:Jak mohu přijmout každý řádek jako slovník?