【Oracle】CASE式を使ってみよう!SQLの条件分岐

Oracle

今回は、CASE式について説明します。プログラムの条件分岐といえばIF文ですが、SQLで条件分岐をするにはCASE式を使います。

データ準備

CASE式を試すために、テーブルを作成しデータを追加します。

-- 商品テーブルの作成
CREATE TABLE products (
    product_id NUMBER PRIMARY KEY,
    product_name VARCHAR2(50)
);

-- 在庫テーブルの作成
CREATE TABLE inventory (
    product_id NUMBER,
    stock_quantity NUMBER
);

-- データ追加 (商品テーブル)
INSERT
  ALL INTO products
VALUES
  (1, 'イヤホン')
INTO
  products
VALUES
  (2, 'パソコン')
INTO
  products
VALUES
  (3, 'キーボード')
INTO
  products
VALUES
  (4, 'マウス')
INTO
  products
VALUES
  (5, 'カメラ')
SELECT
  *
FROM
  DUAL;

-- データ追加 (在庫テーブル)
INSERT
  ALL INTO inventory
VALUES
  (1, 10)
INTO
  inventory
VALUES
  (2, 0)
INTO
  inventory
VALUES
  (3, 5)
INTO
  inventory
VALUES
  (4, 3)
INTO
  inventory
VALUES
  (5, 8)
SELECT
  *
FROM
  DUAL;
商品番号商品名
1イヤホン
2パソコン
3キーボード
4マウス
5カメラ
商品テーブル
商品番号在庫数
110
20
35
43
58
在庫テーブル

では、CASE式を使って商品の在庫有無を判定をしてみたいと思います!

CASE式の基本的な使い方

CASE式の基本的な書き方は下記になります。

SELECT
  CASE
    WHEN 条 件1 THEN 結果1
    WHEN 条 件2 THEN 結果2
    ELSE 結果3 -- (条件1、2以外)
  END 
FROM
  テ ー ブ ル 名

CASE式を書くときは必ずCASEから始まりENDで終えなければいけません。もし、ENDがなかったらエラー(※)が発生します。WHEN 条件 THEN 結果 で条件に当てはまれば結果を返してくれます。

※ORA-00905: missing keyword

では、在庫有無を確認してみましょう!

SELECT
  p.product_name AS "商品名",
  i.stock_quantity AS "在庫数",
  CASE
    WHEN i.stock_quantity > 0 THEN '在庫有り'
    ELSE '在庫無し'
  END AS "在庫有無"
FROM
  products p
  JOIN inventory i ON p.product_id = i.product_id
商品名在庫数在庫有無
イヤホン10在庫有り
パソコン0在庫無し
キーボード5在庫有り
マウス3在庫有り
カメラ8在庫有り
CASE式で在庫有無を確認

パソコンの在庫がないことがわかりました!

ELSE ‘在庫無し’ としてますが、 ELSEは省略も可能で、条件に当てはまらないものはNULLになります。

条件は複数指定できますが、条件を書きすぎると処理が重くなります。注意しましょう。

SELECT
  p.product_name AS "商品名",
  i.stock_quantity AS "在庫数",
  CASE
    WHEN i.stock_quantity = 0 THEN '×'
    WHEN i.stock_quantity <= 5 THEN '△'
    WHEN i.stock_quantity > 6 THEN '○'
  END AS "判定"
FROM
  products p
  JOIN inventory i ON p.product_id = i.product_id
商品名在庫数判定
イヤホン10
パソコン0×
キーボード5
マウス3
カメラ8
CASE式で在庫が⚪︎(多い)△(少ない)×(無い)で判定

まとめ

CASE式は CASE で始まって END で終わらせるELSEは省略できる条件は複数指定できる。ただし、条件を書きすぎると処理が重くなるので注意が必要!ってことぐらい覚えておきましょう。ぜひ、手を動かしていろいろと試してみてください。

コメント