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

MySQL-CASEvsIFステートメントvsIF関数

    マニュアルからifのように見えます 関数は、caseの柔軟性の低い形式です。 表現。たとえば、次のように書くことができます:

    select if(username = 'darxysaq', 'high', 'low') as awesomeness
    

    そして、caseと同等です :

    select case when username = 'darxysaq' then 'high' else 'low' end as awesomeness
    

    しかし、case より柔軟です。次のように、複数のブランチを許可します:

    select case 
           when username = 'darxysaq' then 'high' 
           when username = 'john skeet' then 'medium' 
           else 'low' 
           end as awesomeness
    

    そして、それはswitchのように機能することができます :

    select case username 
           when 'darxysaq' then 'high' 
           when 'john skeet' then 'medium' 
           else 'low' 
           end as awesomeness
    

    ここで、if ステートメントは完全に異なる獣です。これは、MySQLプロシージャの制御ステートメント です。 。ステートメントフォームは次のようになります:

    CREATE FUNCTION GetAwesomeness (username varchar(50))
    RETURNS varchar(20)
    BEGIN
       IF username = 'darxysaq' THEN
          return 'high';
       ELSEIF username = 'john skeet' THEN
          return 'medium';
       ELSE
         return 'low';
       END IF;
    END; //
    

    これがステートメントバージョンのSQLフィドルです。 Bean氏は、彼が作り上げたすべてではないようです!

    最後の注意:case 式は標準SQLであり、ほとんどのデータベースで機能します。 if 関数は標準SQLではなく、SQLServerやPostgreSQLなどの他のデータベースでは機能しません。




    1. タイムスタンプを使用した日別のMySQLグループの結果

    2. SELECT DISTINCTが指定されている場合、ORDERBY項目は選択リストに表示される必要があります

    3. mysql/sqlを使用して文字列をシャッフルします

    4. SQLServerのカーソルタイプ-動的カーソルのみを転送| SQLServerチュートリアル/TSQLチュートリアル