Mysql
 sql >> база данни >  >> RDS >> Mysql

Обяснена функция на MySQL IF().

MySQL има IF() функция, която осигурява удобен начин за извършване на проста операция „IF/ELSE“.

Работи подобно на основния IF /ELSE изявление, тъй като ни позволява да проверим за условие и да върнем различен резултат в зависимост от това дали е вярно или не.

По-конкретно, ако първият аргумент на IF() функцията е вярна, вторият аргумент се връща. Ако не е вярно, се връща третият аргумент.

Синтаксис

IF(expr1,expr2,expr3)

Ако expr1 е TRUE (expr1 <> 0 и expr1 НЕ Е NULL ), IF() връща expr2 . В противен случай връща expr3 .

Тип връщане

  • Ако expr2 или expr3 произведете низ, резултатът е низ. Ако expr2 и expr3 са и двата низа и всеки от низовете е чувствителен към малки и големи букви, резултатът е чувствителен към малки и големи.
  • Ако expr2 или expr3 произведете стойност с плаваща запетая, резултатът е стойност с плаваща запетая.
  • Ако expr2 или expr3 произведете цяло число, резултатът е цяло число.

Пример

Ето един прост пример, за да демонстрирате как работи:

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

Резултат:

No

Тук проверихме дали 1 е по-голямо от 2 или не. Не е и така беше върнат третият аргумент.

Ето какво се случва, когато първият израз е верен:

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

Резултат:

Yes

Пример за база данни

Ето пример, който използва IF() функция при запитване към база данни:

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

Резултат:

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

Вложено IF() Функции

Възможно е да се вложи IF() функции, за да се осигури повече от двоичен резултат.

Например:

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;

Резултат:

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

Нули и нули

Ако първият израз е или NULL или 0 , тогава е false и се връща втората стойност:

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

Резултат:

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

Тук първата колона е вярна, защото се разрешава до 1. Другите две колони връщат втория аргумент, тъй като първият им аргумент е null и 0 съответно.

Ето пример за база данни:

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

Резултат:

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

Въпреки че в този случай същият резултат би могъл да се постигне с малко по-малко код с помощта на IFNULL() функция или дори COALESCE() функция.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво прави DELIMITER // в тригер?

  2. КОЛОНА ИЗПУСКАНЕ на MySQL

  3. Нулиране на Root парола на MySQL

  4. Как да създадете обобщена таблица в MySQL

  5. PERIOD_ADD() Примери – MySQL