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文は複数の条件に対応でき、より柔軟なロジックを実装できます。