Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wyjaśnienie funkcji MySQL IF()

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 (expr1 <> 0expr1 NIE JEST NULL ), IF() zwraca expr2 . W przeciwnym razie zwraca expr3 .

Typ zwrotu

  • Jeśli expr2 lub expr3 tworzą łańcuch, wynikiem jest łańcuch. Jeśli expr2 i expr3 są łańcuchami i każdy z nich rozróżnia wielkość liter, wynik rozróżnia wielkość liter.
  • Jeśli expr2 lub expr3 generują wartość zmiennoprzecinkową, wynikiem jest wartość zmiennoprzecinkowa.
  • Jeśli expr2 lub expr3 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. xampp MySQL nie uruchamia się

  2. Używasz warstwy bazy danych Django poza Django?

  3. Jak połączyć dwa stoły w MySQL

  4. Wskazówki dotyczące aktualizacji klastra Percona XtraDB do wersji 8.0

  5. Zamów tabelę MySQL według dwóch kolumn