sql >> Database >  >> RDS >> Mysql

MySQL IF()-functie uitgelegd

MySQL heeft een IF() functie die een gemakkelijke manier biedt om een ​​eenvoudige "IF/ELSE"-bewerking uit te voeren.

Het werkt vergelijkbaar met een standaard IF /ELSE statement, in die zin dat het ons in staat stelt om te controleren op een voorwaarde en een ander resultaat te retourneren, afhankelijk van of het waar is of niet.

Meer specifiek, als het eerste argument voor de IF() functie waar is, wordt het tweede argument geretourneerd. Als het niet waar is, wordt het derde argument geretourneerd.

Syntaxis

IF(expr1,expr2,expr3)

Als expr1 is TRUE (expr1 <> 0 en expr1 IS NIET NULL ), IF() retourneert expr2 . Anders retourneert het expr3 .

Retourtype

  • Als expr2 of expr3 een string produceren, is het resultaat een string. Als expr2 en expr3 zijn beide tekenreeksen en elke tekenreeks is hoofdlettergevoelig, het resultaat is hoofdlettergevoelig.
  • Als expr2 of expr3 een drijvende-kommawaarde produceren, is het resultaat een drijvende-kommawaarde.
  • Als expr2 of expr3 een geheel getal produceren, het resultaat is een geheel getal.

Voorbeeld

Hier is een eenvoudig voorbeeld om te demonstreren hoe het werkt:

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

Resultaat:

No

Hier hebben we gecontroleerd of 1 groter is dan 2. Dat is niet zo, en dus werd het derde argument geretourneerd.

Dit is wat er gebeurt als de eerste uitdrukking waar is:

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

Resultaat:

Yes

Databasevoorbeeld

Hier is een voorbeeld dat de IF() . gebruikt functie bij het opvragen van een database:

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

Resultaat:

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

Genest IF() Functies

Het is mogelijk om IF() . te nesten functies om voor meer dan een binaire uitkomst te zorgen.

Bijvoorbeeld:

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;

Resultaat:

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

Nulls en nullen

Als de eerste expressie NULL . is of 0 , dan is het onwaar en wordt de tweede waarde geretourneerd:

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

Resultaat:

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

Hier is de eerste kolom waar omdat deze wordt omgezet in 1. De andere twee kolommen retourneren het tweede argument, omdat hun eerste argument null was. en 0 respectievelijk.

Hier is een databasevoorbeeld:

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

Resultaat:

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

Hoewel in dit geval hetzelfde resultaat had kunnen worden bereikt met iets minder code met behulp van de IFNULL() functie of zelfs de COALESCE() functie.


  1. Upgraden naar de nieuwste Jira met de nieuwste versie van MariaDB Server

  2. Wat is het ideale gegevenstype om te gebruiken bij het opslaan van breedtegraad / lengtegraad in een MySQL-database?

  3. SQL Server 2008 - Hoe retourneer ik een door de gebruiker gedefinieerd tabeltype van een functie met tabelwaarde?

  4. MySQL dynamische draaitabel