【データベース】「SQLの実践」簡単速習‼【③IF式・CASE/MySQL】

SQL

こんにちはヤク学長です。
データサイエンティスト兼ファーマシストで、アルゴリズムやBI開発を行っています。

本記事の目的は、「SQLの基本操作を知る」ことを目的としています。

【本記事のもくじ】

まず、「SQL」に真剣に取り組むための概要を解説します。
下記の方法で、簡単に概要を抑えることができます。

  • 5.IF式
  • 6.CASE式

それでは、上から順番に見ていきます。
なお、本上記の方法を順番に抑えれば成果が出ます。

記事の内容は「転載 & 引用OK」問題ありません。

5.IF式

MySQLにおけるIF式は、条件分岐を行うための関数の一つです。IF式は、指定した条件が真である場合に返す値と、偽である場合に返す値を指定することができます。

以下は、IF式の基本的な構文です。

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

条件式は、trueかfalseを返す式である必要があります。真の場合の値と偽の場合の値は、それぞれ返す値を指定します。

以下は、具体例です。

SELECT name, IF(score >= 60, '合格', '不合格') as result FROM students;

このSQL文では、studentsテーブルからnameとscoreのカラムを取得し、IF式を使ってscoreが60以上である場合には「合格」、そうでない場合には「不合格」という文字列をresultカラムに追加しています。例えば、scoreが80であれば、「合格」という文字列が、scoreが50であれば「不合格」という文字列がresultカラムに格納されます。

また、IF式はネストすることもできます。

SELECT name, IF(score >= 80, '優秀', IF(score >= 60, '合格', '不合格')) as result FROM students;

このSQL文では、scoreが80以上である場合には「優秀」、60以上80未満である場合には「合格」、60未満である場合には「不合格」という文字列をresultカラムに追加しています。

以上が、MySQLにおけるIF式の解説と具体例になります。

6.CASE式

MySQLにおけるCASE式は、条件分岐を行うための関数の一つです。CASE式は、複数の条件を指定して、それに応じた値を返すことができます。

以下は、CASE式の基本的な構文です。

CASE
  WHEN 条件式1 THEN 値1
  WHEN 条件式2 THEN 値2
  ...
  ELSE デフォルト値
END

条件式は、trueかfalseを返す式である必要があります。複数の条件式を指定する場合には、WHEN句を使用します。ELSE句を使用すると、条件に一致しない場合に返すデフォルト値を指定することができます。

以下は、具体例です。

SELECT name,
CASE
  WHEN score >= 80 THEN '優秀'
  WHEN score >= 60 THEN '合格'
  ELSE '不合格'
END AS result
FROM students;

このSQL文では、studentsテーブルからnameとscoreのカラムを取得し、CASE式を使ってscoreが80以上の場合には「優秀」、60以上80未満の場合には「合格」、それ以外の場合には「不合格」という文字列をresultカラムに追加しています。例えば、scoreが80であれば「優秀」という文字列が、scoreが50であれば「不合格」という文字列がresultカラムに格納されます。

また、CASE式はネストすることもできます。

SELECT name,
CASE
  WHEN score >= 60 THEN
    CASE
      WHEN score >= 80 THEN '優秀'
      ELSE '合格'
    END
  ELSE '不合格'
END AS result
FROM students;

このSQL文では、scoreが60以上である場合には、さらにscoreが80以上である場合には「優秀」、80未満である場合には「合格」という文字列を返します。scoreが60未満である場合には、「不合格」という文字列を返します。

以上が、MySQLにおけるCASE式の解説と具体例になります。

ORDER BY でCASEを利用する

MySQLでは、ORDER BY句でCASE式を利用することができます。ORDER BY句は、取得したデータをソートするために使用されるもので、CASE式を使うことで、条件に応じたソートを行うことができます。

以下は、具体例です。

SELECT name, score,
CASE
  WHEN score >= 80 THEN '優秀'
  WHEN score >= 60 THEN '合格'
ELSE '不合格'
END AS result
FROM students
ORDER BY
CASE
  WHEN score >= 80 THEN 1
  WHEN score >= 60 THEN 2
  ELSE 3
END;

このSQL文では、studentsテーブルからnameとscoreのカラムを取得し、CASE式を使ってscoreが80以上の場合には「優秀」、60以上80未満の場合には「合格」、それ以外の場合には「不合格」という文字列をresultカラムに追加しています。そして、ORDER BY句で、scoreが80以上の場合には1、60以上80未満の場合には2、それ以外の場合には3を返すCASE式を使用して、resultカラムをソートしています。これにより、優秀な成績から順にソートされます。

また、DESCを使うことで、逆順にソートすることもできます。

SELECT name, score,
CASE
  WHEN score >= 80 THEN '優秀'
  WHEN score >= 60 THEN '合格'
  ELSE '不合格'
END AS result
FROM students
ORDER BY
CASE
  WHEN score >= 80 THEN 1
  WHEN score >= 60 THEN 2
ELSE 3
END DESC;

このSQL文では、resultカラムを逆順にソートしています。

以上が、MySQLでORDER BY句でCASE式を利用する方法になります。

UPDATE文でCASE式

MySQLのUPDATE文でCASE式を使用する場合、指定した条件に基づいて、特定のカラムの値を更新することができます。以下は、UPDATE文でCASE式を使用する基本的な構文です。

UPDATE テーブル名
SET カラム名 =
  CASE
    WHEN 条件式1 THEN 値1
    WHEN 条件式2 THEN 値2
    ELSE デフォルト値
  END
WHERE 条件式;

上記の構文では、テーブル名、カラム名、条件式を指定し、CASE式で条件式1と2に該当する場合には値1と2を、それ以外の場合にはデフォルト値を更新します。

以下は、具体例です。

UPDATE students
SET score =
  CASE
    WHEN score >= 80 THEN score + 10
    WHEN score >= 60 THEN score + 5
    ELSE score
  END
WHERE id = 1;

このSQL文では、idが1であるレコードのscoreカラムに対して、CASE式を使用して、scoreが80以上の場合には10、60以上80未満の場合には5を加算し、それ以外の場合にはscoreをそのまま更新します。

また、複数のカラムを更新する場合には、以下のようにカンマ区切りで複数のカラムを指定して、それぞれに対してCASE式を使用することもできます。

UPDATE students
SET
  score =
    CASE
      WHEN score >= 80 THEN score + 10
      WHEN score >= 60 THEN score + 5
      ELSE score
    END,
  status =
    CASE
      WHEN score >= 80 THEN '優秀'
      WHEN score >= 60 THEN '合格'
      ELSE '不合格'
    END
WHERE id = 1;

このSQL文では、idが1であるレコードのscoreカラムとstatusカラムに対して、それぞれCASE式を使用して、scoreが80以上の場合には10を加算、60以上80未満の場合には5を加算し、statusカラムにはそれぞれ「優秀」「合格」「不合格」の文字列を更新します。

以上が、MySQLのUPDATE文でCASE式を使用する方法になります。


というわけで、今回は以上です。大変大変お疲れ様でした。
引き続きで、徐々に発信していきます。

コメントや感想を受け付けています。ちょっとした感想でもいいので嬉しいです。

それでは、以上です。

最新情報をチェックしよう!