MySQL ma funkcję IF()
funkcja zapewniająca wygodny sposób wykonania prostej operacji „JEŻELI/ELSE”.
Działa podobnie do podstawowego IF
/ELSE
oświadczenie, ponieważ pozwala nam sprawdzić warunek i zwrócić inny wynik w zależności od tego, czy jest prawdziwy, czy nie.
Dokładniej, jeśli pierwszy argument funkcji IF()
funkcja jest prawdziwa, zwracany jest drugi argument. Jeśli to nieprawda, zwracany jest trzeci argument.
Składnia
IF(expr1,expr2,expr3)
Jeśli expr1
jest TRUE
(
i expr1
<> 0
), expr1
NIE JEST NULLIF()
zwraca expr2
. W przeciwnym razie zwraca expr3
.
Typ zwrotu
- Jeśli
expr2
lubexpr3
tworzą łańcuch, wynikiem jest łańcuch. Jeśliexpr2
iexpr3
są łańcuchami i każdy z nich rozróżnia wielkość liter, wynik rozróżnia wielkość liter. - Jeśli
expr2
lubexpr3
generują wartość zmiennoprzecinkową, wynikiem jest wartość zmiennoprzecinkowa. - Jeśli
expr2
lubexpr3
wytworzyć liczbę całkowitą, wynik jest liczbą całkowitą.
Przykład
Oto prosty przykład pokazujący, jak to działa:
SELECT IF( 1 > 2, 'Yes', 'No' );
Wynik:
No
Tutaj sprawdziliśmy, czy 1 jest większe niż 2. Nie jest, więc zwrócono trzeci argument.
Oto, co się dzieje, gdy pierwsze wyrażenie jest prawdziwe:
SELECT IF( 2 > 1, 'Yes', 'No' );
Wynik:
Yes
Przykład bazy danych
Oto przykład, który używa IF()
funkcja podczas odpytywania bazy danych:
SELECT
Name,
Population,
IF( Population > 10000000, 'Big', 'Small' ) AS "Big/Small"
FROM Country
ORDER BY Name ASC
LIMIT 10;
Wynik:
+---------------------+------------+-----------+ | 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 | +---------------------+------------+-----------+
Zagnieżdżone IF()
Funkcje
Możliwe jest zagnieżdżenie IF()
funkcje, aby zapewnić więcej niż wynik binarny.
Na przykład:
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;
Wynik:
+--------------+------------+------------+ | 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 | +--------------+------------+------------+
Zera i zera
Jeśli pierwsze wyrażenie to NULL
lub 0
, to jest fałszywe, a zwracana jest druga wartość:
SELECT
IF( 1, 'True', 'False' ) AS "1",
IF( null, 'True', 'False' ) AS "Null",
IF( 0, 'True', 'False' ) AS "Zero";
Wynik:
+------+-------+-------+ | 1 | Null | Zero | +------+-------+-------+ | True | False | False | +------+-------+-------+
Tutaj pierwsza kolumna jest prawdziwa, ponieważ jest równa 1. Pozostałe dwie kolumny zwracają drugi argument, ponieważ ich pierwszym argumentem był null
i 0
odpowiednio.
Oto przykład bazy danych:
SELECT
Name,
GNPOld,
IF( GNPOld, GNPOld, 'None' )
FROM Country
ORDER BY Name ASC
LIMIT 10;
Wynik:
+---------------------+-----------+------------------------------+ | 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 | +---------------------+-----------+------------------------------+
Chociaż w tym przypadku ten sam wynik można było osiągnąć przy nieco mniejszej ilości kodu przy użyciu IFNULL()
funkcja lub nawet COALESCE()
funkcja.