はじめに

参考ページ

  • dokoQL
    • ID:SUKKIRI=2800YEN
    • PW:なし



CASE式

準備

  • 以下のSQL(PopTbl)をロードしておく
CREATE TABLE PopTbl
(pref_name VARCHAR(32) PRIMARY KEY,
 population INTEGER NOT NULL);

INSERT INTO PopTbl VALUES('徳島', 100);
INSERT INTO PopTbl VALUES('香川', 200);
INSERT INTO PopTbl VALUES('愛媛', 150);
INSERT INTO PopTbl VALUES('高知', 200);
INSERT INTO PopTbl VALUES('福岡', 300);
INSERT INTO PopTbl VALUES('佐賀', 100);
INSERT INTO PopTbl VALUES('長崎', 200);
INSERT INTO PopTbl VALUES('東京', 400);
INSERT INTO PopTbl VALUES('群馬', 50);



2つの書式

単純CASE式

  • sexが条件式の上部に出ているので分かりやすい
  • WHEN句sexが入っていないので、1行ですべてを表現できていない
CASE sex
  WHEN '1' THEN '男'
  WHEN '2' THEN '女'
ELSE 'その他' END


検索CASE式

  • sexが条件式の上部に出ているので分かりやすい
  • WHEN句sexが入っていないので、1行ですべてを表現できている
CASE WHEN sex = '1' THEN '男'
     WHEN sex = '2' THEN '女'
ELSE 'その他' END



注意点

  • 注意1:各分岐が返すデータ型を統一する
  • 注意2:ENDの書き忘れに注意
  • 注意3:ELSE句は必ず書こう



注意点

自己結合

準備

  • 以下のSQL(Products)をロードしておく
CREATE TABLE Products
(name VARCHAR(16) PRIMARY KEY,
 price INTEGER NOT NULL);

--重複順列・順列・組み合わせ
INSERT INTO Products VALUES('りんご',  100);
INSERT INTO Products VALUES('みかん',  50);
INSERT INTO Products VALUES('バナナ',  80);



重複順列

  • Productsの3レコードの重複順列を作成する
    • 全パターンの9レコードが表示される
    • Productsテーブルは同じものだが別名を付けることで自己結合させている
    • WHERE句による条件指定を行わない
SELECT
    P1.name AS NAME_1, 
    P2.name AS NAME_2
FROM Products P1, Products P2



順列

  • Productsの3レコードの順列を作成する
    • Productsテーブルは同じものだが別名を付けることで自己結合させている
    • WHERE句P1.name <> P2.nameを指定する
SELECT
    P1.name AS NAME_1, 
    P2.name AS NAME_2
 FROM Products P1, Products P2
WHERE P1.name <> P2.name



組合せ

Productsの3レコードの組合せを作成する

  • Productsテーブルは同じものだが別名を付けることで自己結合させている
  • WHERE句P1.name > P2.nameを指定する
    • 文字コードの順で不等号を付けている
    • バナナ>りんご>みかん
SELECT
    P1.name AS NAME_1, 
    P2.name AS NAME_2
 FROM Products P1, Products P2
WHERE P1.name > P2.name



inserted by FC2 system