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
(
e expr1
<> 0
), expr1
NON È NULLOIF()
restituisce expr2
. In caso contrario, restituisce expr3
.
Tipo di reso
- Se
expr2
oexpr3
produrre una stringa, il risultato è una stringa. Seexpr2
eexpr3
sono entrambe stringhe e una delle due stringhe fa distinzione tra maiuscole e minuscole, il risultato fa distinzione tra maiuscole e minuscole. - Se
expr2
oexpr3
produrre un valore in virgola mobile, il risultato è un valore in virgola mobile. - Se
expr2
oexpr3
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.