Mysql
 sql >> Database >  >> RDS >> Mysql

Spiegazione della funzione MySQL IF()

MySQL ha un IF() funzione che fornisce un modo conveniente per eseguire una semplice operazione “SE/ALTRO”.

Funziona in modo simile a un IF di base /ELSE istruzione, in quanto ci consente di verificare una condizione e restituire un risultato diverso a seconda che sia vero o meno.

Più specificamente, se il primo argomento per IF() funzione è true, viene restituito il secondo argomento. Se non è vero, viene restituito il terzo argomento.

Sintassi

IF(expr1,expr2,expr3)

Se expr1 è TRUE (expr1 <> 0expr1 NON È NULLO ), IF() restituisce expr2 . In caso contrario, restituisce expr3 .

Tipo di reso

  • Se expr2 o expr3 produrre una stringa, il risultato è una stringa. Se expr2 e expr3 sono entrambe stringhe e una delle due stringhe fa distinzione tra maiuscole e minuscole, il risultato fa distinzione tra maiuscole e minuscole.
  • Se expr2 o expr3 produrre un valore in virgola mobile, il risultato è un valore in virgola mobile.
  • Se expr2 o expr3 produrre un intero, il risultato è un intero.

Esempio

Ecco un semplice esempio per dimostrare come funziona:

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

Risultato:

No

Qui, abbiamo verificato se 1 è maggiore di 2. Non lo è, quindi è stato restituito il terzo argomento.

Ecco cosa succede quando la prima espressione è vera:

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

Risultato:

Yes

Esempio di database

Ecco un esempio che utilizza IF() funzione quando si interroga un database:

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

Risultato:

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

Nidificato IF() Funzioni

È possibile annidare IF() funzioni al fine di fornire più di un risultato binario.

Ad esempio:

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;

Risultato:

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

Nulli e zeri

Se la prima espressione è NULL o 0 , quindi è false e viene restituito il secondo valore:

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

Risultato:

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

Qui, la prima colonna è vera perché si risolve in 1. Le altre due colonne restituiscono il secondo argomento, perché il loro primo argomento era null e 0 rispettivamente.

Ecco un esempio di database:

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

Risultato:

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

Anche se in questo caso si sarebbe potuto ottenere lo stesso risultato con un codice leggermente inferiore utilizzando IFNULL() funzione o anche il COALESCE() funzione.