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 ( och expr1 <> 0 ), expr1 ÄR INTE NULLIF() returnerar expr2 . Annars returnerar den expr3 .
Returtyp
- Om
expr2ellerexpr3producera en sträng, blir resultatet en sträng. Omexpr2ochexpr3är båda strängar och båda strängarna är skiftlägeskänsliga, resultatet är skiftlägeskänsligt. - Om
expr2ellerexpr3producerar ett flyttal, blir resultatet ett flyttal. - Om
expr2ellerexpr3producera 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.