MySQL hat ein IF()
Funktion, die eine bequeme Möglichkeit bietet, eine einfache „IF/ELSE“-Operation durchzuführen.
Es funktioniert ähnlich wie ein einfaches IF
/ELSE
-Anweisung, da sie es uns ermöglicht, auf eine Bedingung zu prüfen und je nachdem, ob sie wahr ist oder nicht, ein anderes Ergebnis zurückzugeben.
Genauer gesagt, wenn das erste Argument für IF()
Funktion wahr ist, wird das zweite Argument zurückgegeben. Wenn es nicht wahr ist, wird das dritte Argument zurückgegeben.
Syntax
IF(expr1,expr2,expr3)
Wenn expr1
ist TRUE
(
und expr1
<> 0
), expr1
IST NICHT NULLIF()
gibt expr2
zurück . Andernfalls wird expr3
zurückgegeben .
Rückgabetyp
- Falls
expr2
oderexpr3
erzeugt einen String, das Ergebnis ist ein String. Wennexpr2
undexpr3
beide Zeichenfolgen sind und bei einer der Zeichenfolgen zwischen Groß- und Kleinschreibung unterschieden wird, wird beim Ergebnis zwischen Groß- und Kleinschreibung unterschieden. - Falls
expr2
oderexpr3
einen Fließkommawert erzeugen, ist das Ergebnis ein Fließkommawert. - Falls
expr2
oderexpr3
eine ganze Zahl erzeugen, ist das Ergebnis eine ganze Zahl.
Beispiel
Hier ist ein einfaches Beispiel, um zu demonstrieren, wie es funktioniert:
SELECT IF( 1 > 2, 'Yes', 'No' );
Ergebnis:
No
Hier haben wir überprüft, ob 1 größer als 2 ist oder nicht. Das ist es nicht, und so wurde das dritte Argument zurückgegeben.
Folgendes passiert, wenn der erste Ausdruck wahr ist:
SELECT IF( 2 > 1, 'Yes', 'No' );
Ergebnis:
Yes
Datenbankbeispiel
Hier ist ein Beispiel, das IF()
verwendet Funktion beim Abfragen einer Datenbank:
SELECT
Name,
Population,
IF( Population > 10000000, 'Big', 'Small' ) AS "Big/Small"
FROM Country
ORDER BY Name ASC
LIMIT 10;
Ergebnis:
+---------------------+------------+-----------+ | 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 | +---------------------+------------+-----------+
Verschachteltes IF()
Funktionen
Es ist möglich, IF()
zu verschachteln Funktionen, um mehr als ein binäres Ergebnis zu liefern.
Zum Beispiel:
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;
Ergebnis:
+--------------+------------+------------+ | 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 | +--------------+------------+------------+
Nullen und Nullen
Wenn der erste Ausdruck entweder NULL
ist oder 0
, dann ist es falsch und der zweite Wert wird zurückgegeben:
SELECT
IF( 1, 'True', 'False' ) AS "1",
IF( null, 'True', 'False' ) AS "Null",
IF( 0, 'True', 'False' ) AS "Zero";
Ergebnis:
+------+-------+-------+ | 1 | Null | Zero | +------+-------+-------+ | True | False | False | +------+-------+-------+
Hier ist die erste Spalte wahr, weil sie zu 1 aufgelöst wird. Die anderen beiden Spalten geben das zweite Argument zurück, weil ihr erstes Argument null
war und 0
bzw..
Hier ist ein Datenbankbeispiel:
SELECT
Name,
GNPOld,
IF( GNPOld, GNPOld, 'None' )
FROM Country
ORDER BY Name ASC
LIMIT 10;
Ergebnis:
+---------------------+-----------+------------------------------+ | 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 | +---------------------+-----------+------------------------------+
Obwohl in diesem Fall das gleiche Ergebnis mit etwas weniger Code unter Verwendung von IFNULL()
hätte erreicht werden können Funktion oder sogar die COALESCE()
Funktion.