sql >> データベース >  >> RDS >> Mysql

MySQL IF()関数の説明

    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() 機能。


    1. 連続範囲でグループ化するにはどうすればよいですか

    2. CLOBをOracleデータベースに挿入します

    3. MySQLの「スキーマの作成」と「データベースの作成」-違いはありますか

    4. MySQLクロスサーバー選択クエリ