MySQLにはIF()
があります 簡単な「IF/ELSE」操作を実行するための便利な方法を提供する関数。
基本的なIF
と同様に機能します / ELSE
ステートメント。条件をチェックし、それが真であるかどうかに応じて異なる結果を返すことができます。
具体的には、IF()
の最初の引数の場合 関数がtrueの場合、2番目の引数が返されます。真でない場合は、3番目の引数が返されます。
構文
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より大きいかどうかを確認しました。そうでないため、3番目の引数が返されました。
最初の式が真の場合は次のようになります。
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になり、2番目の値が返されます:
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に解決されるため、trueです。他の2つの列は、最初の引数がnull
であったため、2番目の引数を返します。 および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()
機能。