sql >> Databasteknik >  >> RDS >> Mysql

MySQL IF() Funktion förklaras

MySQL har en IF() funktion som ger ett bekvämt sätt att utföra en enkel "OM/ELSE"-operation.

Det fungerar på samma sätt som en grundläggande IF /ELSE uttalande, genom att det tillåter oss att kontrollera ett tillstånd och returnera ett annat resultat beroende på om det är sant eller inte.

Mer specifikt, om det första argumentet till IF() funktionen är sann, det andra argumentet returneras. Om det inte är sant, returneras det tredje argumentet.

Syntax

IF(expr1,expr2,expr3)

Om expr1 är TRUE (expr1 <> 0 och expr1 ÄR INTE NULL ), IF() returnerar expr2 . Annars returnerar den expr3 .

Returtyp

  • Om expr2 eller expr3 producera en sträng, blir resultatet en sträng. Om expr2 och expr3 är båda strängar och båda strängarna är skiftlägeskänsliga, resultatet är skiftlägeskänsligt.
  • Om expr2 eller expr3 producerar ett flyttal, blir resultatet ett flyttal.
  • Om expr2 eller expr3 producera ett heltal, blir resultatet ett heltal.

Exempel

Här är ett enkelt exempel för att visa hur det fungerar:

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

Resultat:

No

Här kontrollerade vi om 1 är större än 2 eller inte. Det är det inte, och därför returnerades det tredje argumentet.

Så här händer när det första uttrycket är sant:

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

Resultat:

Yes

Databasexempel

Här är ett exempel som använder IF() funktion när du frågar efter en databas:

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

Resultat:

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

Inkapslade IF() Funktioner

Det är möjligt att kapsla IF() fungerar för att ge mer än ett binärt resultat.

Till exempel:

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;

Resultat:

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

Nollor och nollor

Om det första uttrycket är antingen NULL eller 0 , då är det falskt och det andra värdet returneras:

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

Resultat:

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

Här är den första kolumnen sann eftersom den löser sig till 1. De andra två kolumnerna returnerar det andra argumentet, eftersom deras första argument var null och 0 respektive.

Här är ett databasexempel:

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

Resultat:

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

Även om i det här fallet samma resultat kunde ha uppnåtts med lite mindre kod med IFNULL() funktion eller till och med COALESCE() funktion.


  1. Vikten av baslinjer

  2. Trace Flag 2389 och den nya Cardinality Estimator

  3. Så här löser du problem

  4. Hur Sinh() fungerar i PostgreSQL