MySQLでIF文やCASE文の条件分岐

MySQLで条件分岐

MySQLでの条件分岐の書き方には主に2つの方法があります。
一つはIF()関数を使用する方法で、もう一つはCASE文を使用する方法です。
用途やシチュエーションに応じて使い分けられます。

1. IF()関数

IF()関数は、シンプルな条件分岐を行う場合に便利です。
3つの引数を取ります。

IF(条件, 真の場合の値, 偽の場合の値)

例えば、ある数値が10より大きいかどうかをチェックし、大きければ"大きい"、そうでなければ"小さい"と表示する例です。

SELECT IF(値 > 10, '大きい', '小さい') AS 判定結果 FROM テーブル名;

このIF()関数は単純な条件に基づいて結果を返すため、比較的単純なロジックには適しています。
ただし、条件が複雑になったり、複数の条件を組み合わせて処理を行いたい場合には、次に紹介するCASE文が適している場合もあります。

2. CASE文

CASE文は複数の条件をチェックし、それに応じて異なる結果を返すための構文です。
IF()関数よりも柔軟で、複数の条件を扱う際に推奨されます。
基本的な書き方は以下のようになります。

CASE
  WHEN 条件1 THEN 結果1
  WHEN 条件2 THEN 結果2
  ...
  ELSE デフォルト結果
END

CASE文の具体例は以下の通りです。
以下の例では、数値が10より大きい場合は"大きい"、5以上10以下の場合は"中くらい"、5未満の場合は"小さい"という判定を行います。

SELECT 
  CASE 
    WHEN 値 > 10 THEN '大きい'
    WHEN 値 >= 5 THEN '中くらい'
    ELSE '小さい'
  END AS 判定結果
FROM テーブル名;

この構文では、まず最初にWHENで指定された条件が評価され、その条件が真であればTHENの後に続く値が返されます。
どの条件も満たさなかった場合にはELSEの後に記載されたデフォルトの値が返されます。

3. 実際の使用例

次に、実際のデータベース操作のシナリオでIF()とCASE文をどのように使うかを示します。

例1: IF()関数を使った簡単な条件分岐

例えば、従業員のテーブルがあり、給料が5000以上なら"高い"、それ以下なら"低い"と表示したい場合、以下のように書くことができます。

SELECT 名前, IF(給料 >= 5000, '高い', '低い') AS 給料判定 FROM 従業員;
例2: CASE文を使った複雑な条件分岐

従業員の年齢に応じて異なる分類を行いたい場合、以下のようにCASE文を使います。

SELECT 名前, 
  CASE 
    WHEN 年齢 >= 60 THEN 'シニア'
    WHEN 年齢 >= 40 THEN 'ミドルエイジ'
    WHEN 年齢 >= 20 THEN 'ヤングアダルト'
    ELSE '若い'
  END AS 年齢分類
FROM 従業員;

この場合、年齢が60歳以上の従業員には"シニア"、40歳以上60歳未満の従業員には"ミドルエイジ"、20歳以上40歳未満の従業員には"ヤングアダルト"、それ未満の従業員には"若い"と分類されます。

4. IF()関数とCASE文の違い

  • IF()関数はシンプルな条件式に対して使いやすく、3つの引数で簡潔に書けます。

単一の条件チェックで使うのが最適です。

  • CASE文は複数の条件を扱う際に強力で、読みやすく構造化されたコードが書けます。

特に条件が多い場合や、複雑なロジックを実装する際に有効です。

5. パフォーマンスについて

IF()関数とCASE文のどちらを使うべきか迷う場合、パフォーマンスに大きな差はほとんどないと考えて良いです。
しかし、可読性や保守性を考えると、複雑なロジックや複数の条件分岐を伴う場合はCASE文を使う方が一般的です。

まとめ

MySQLで条件分岐を行う場合、シンプルな条件であればIF()関数を使い、複雑なロジックや複数の条件を扱う場合はCASE文を使うのが良いです。
IF()関数は構文がシンプルで、簡単な分岐に適している一方、CASE文は複数の条件に対応でき、より柔軟なロジックを実装できます。