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
(
a expr1
<> 0
), expr1
NENÍ NULLIF()
vrátí expr2
. V opačném případě vrátí expr3
.
Typ návratu
- Pokud
expr2
neboexpr3
vytvořit řetězec, výsledkem je řetězec. Pokudexpr2
aexpr3
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
neboexpr3
vytvořit hodnotu s plovoucí desetinnou čárkou, výsledkem je hodnota s plovoucí desetinnou čárkou. - Pokud
expr2
neboexpr3
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.