Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

SQLの条件分岐についてまとめています。

SQLの条件分岐はCASE式を使用

SQLでCASE式を使うと、プログラム的な条件分岐が可能です。

以下のSQLは、departmentsテーブルのdept_name(部署名)がSalesならdept_checkにsales!を、それ以外ならnot sales!を返します。

  1. SELECT `dept_no`,
  2. case `dept_name`
  3. when 'Sales' then 'sales!'
  4. else 'not sales!'
  5. end
  6. as dept_check
  7. FROM `departments`;
  8.  
  9. +---------+------------+
  10. | dept_no | dept_check |
  11. +---------+------------+
  12. | d009 | not sales! |
  13. | d005 | not sales! |
  14. | d002 | not sales! |
  15. | d003 | not sales! |
  16. | d001 | not sales! |
  17. | d004 | not sales! |
  18. | d006 | not sales! |
  19. | d008 | not sales! |
  20. | d007 | sales! |
  21. +---------+------------+

【関連記事】
SQLのCASE式サンプル集 order byやgroup byとの組み合わせもバッチリ 

case式でwhere句まるごと切り替えが可能

case式をwhere句で使うことで、条件記述部分を入れ替えることが可能です。

  1. mysql> select * from employees
  2. where
  3. case
  4. when gender="M" then birth_date
  5. when gender="F" then hire_date
  6. end
  7. > '1970-01-01' limit 10;
  8. +--------+------------+------------+------------+--------+------------+
  9. | emp_no | birth_date | first_name | last_name | gender | hire_date |
  10. +--------+------------+------------+------------+--------+------------+
  11. | 10002 | 1964-06-02 | Bezalel | Simmel | F | 1985-11-21 |
  12. | 10006 | 1953-04-20 | Anneke | Preusig | F | 1989-06-02 |
  13. | 10007 | 1957-05-23 | Tzvetan | Zielinski | F | 1989-02-10 |
  14. | 10009 | 1952-04-19 | Sumant | Peac | F | 1985-02-18 |
  15. | 10010 | 1963-06-01 | Duangkaew | Piveteau | F | 1989-08-24 |
  16. | 10011 | 1953-11-07 | Mary | Sluis | F | 1990-01-22 |
  17. | 10017 | 1958-07-06 | Cristinel | Bouloucos | F | 1993-08-03 |
  18. | 10018 | 1954-06-19 | Kazuhide | Peha | F | 1987-04-03 |
  19. | 10023 | 1953-09-29 | Bojan | Montemayor | F | 1989-12-17 |
  20. | 10024 | 1958-09-05 | Suzette | Pettey | F | 1997-05-19 |
  21. +--------+------------+------------+------------+--------+------------+

上記の例は、gender(性別)がMの場合は比較カラムをbirth_date、Fの場合は比較カラムをhire_dateに変えています。

【関連記事】
SQLのwhereはcase式で条件切替が可能 条件の有り・無しを記述できる 

また、条件のあり、なしを切り替えるには以下のように記述します。

  1. mysql> select * from employees
  2. where case when emp_no < 10010 then first_name like 'B%'
  3. else 1
  4. end limit 10;
  5. +--------+------------+------------+-------------+--------+------------+
  6. | emp_no | birth_date | first_name | last_name | gender | hire_date |
  7. +--------+------------+------------+-------------+--------+------------+
  8. | 10002 | 1964-06-02 | Bezalel | Simmel | F | 1985-11-21 |
  9. | 10010 | 1963-06-01 | Duangkaew | Piveteau | F | 1989-08-24 |
  10. | 10011 | 1953-11-07 | Mary | Sluis | F | 1990-01-22 |
  11. | 10012 | 1960-10-04 | Patricio | Bridgland | M | 1992-12-18 |
  12. | 10013 | 1963-06-07 | Eberhardt | Terkki | M | 1985-10-20 |
  13. | 10014 | 1956-02-12 | Berni | Genin | M | 1987-03-11 |
  14. | 10015 | 1959-08-19 | Guoxiang | Nooteboom | M | 1987-07-02 |
  15. | 10016 | 1961-05-02 | Kazuhito | Cappelletti | M | 1995-01-27 |
  16. | 10017 | 1958-07-06 | Cristinel | Bouloucos | F | 1993-08-03 |
  17. | 10018 | 1954-06-19 | Kazuhide | Peha | F | 1987-04-03 |
  18. +--------+------------+------------+-------------+--------+------------+

条件式の箇所に1を指定すると、条件なしでクエリを実行することになります。

上記の場合、emp_no<10010の場合は、以下のクエリが実行されることになります。

  1. mysql> select * from employees
  2. where 1 limit 10;

ストアドプロシジャ内では、if文による条件分岐が可能

case式は、あくまで値を返すだけでしたが、ストアドプロシジャやストアドプログラム内ではif文を記述して、条件分岐によって異なる処理を実行することが可能です。

例えば、MySQLやOracleの場合は以下のように記述します。

  1. IF 条件式 THEN 処理文
  2. ELSEIF 条件文 THEN 処理文
  3. ELSE 処理文
  4. END IF

記述方法は、DBMSごとに差異があります。

【関連記事】
SQL if文のサンプルコード集 NULL判定や、Switch文のような分岐をする方法 | 「ポテパンスタイル」

まとめ

ポテパンダの一言メモ
  • SQLの条件分岐はcase式で実現可能
  • where句でcase式を使うと、条件文まるごとや比較するカラムの切り替えが可能
  • ストアドプロシジャやストアドプログラム内ではif文で条件分岐して別々の処理実行が可能

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。