-
- SQL の CASE 式って知ってますか
- Weather:晴转阴,南风4-5级,(21~27)℃
- 2008-07-07
今日、同僚から MySQL って CASE 式を SQL の中に記述できましたっけ?と聞かれて、SQL 文に CASE - when 式を記述できることを初めて知りました。PL/SQL でのみ有効な構文かと勘違いしてました。
CASE 式はSQL-92 で標準に取り入れられており、意外と歴史は古いです。SQL99 からかと思いました。しかしながら、超便利な CASE 式を知っている人は意外と少ないと思います。Oracle なら同様の処理が記述できる DECODE 関数の方がメJn6;ャーですね。実際僕もこちらを用いて業務 SQL を書いてました。
が、CASE 式の方が明らかに高機能でした。DECODE 関数を使っているOracleユーJn5;には、是非CASE 式への乗り換えを勧めます。CASE 式には下記の通り4つの利用方法があります。
-
既存のコーJn10;体系を新しい体系に変換する(DECODE 関数の変わり)
SELECT count(*),
CASE code WHEN 'M' THEN '男性' WHEN 'F' THEN '女性' ELSE 'オカマ?' END
FROM table1 GROUP BY code;
-
異なる条件の集計を一つの SQL で行なう(DHW等で比正規化したテーJn19;ルに戻すときに便利)
SELECT
SUM( CASE WHEN code = 'M' THEN 1 ELSE 0 END ), -- 男性の人数
SUM( CASE WHEN code = 'F' THEN 1 ELSE 0 END ) -- 女性の人数
FROM table1;
-
CHECK 制約で二つの列の相関関係を定義する
CONSTRAINT check_salary -- 平社員は給与が20万円以下という制約の例
( CASE WHEN code = '平社員' THEN
CASE WHEN salary <= 200000 THEN 1 ELSE 0 END
ELSE 1 END
)
-
UPDATE 文で CASE 式で条件分岐して更新する
UPDATE 商品テーJn19;ル -- 単価1万円以上の商品の販売価格を10%値引きする
SET 販売価格 = CASE WHEN 単価 >= 100000 THEN 販売価格 * 0.9 ELSE 販売価格 END;
とまぁ、CASE 式は PL/SQL でしか無理かなぁ~と思っていたことの多くを SQL 一つで実装できてしまいます。しかも速度も PL/SQL より高速です。今後は多用していこうと思いました。
ちなみに、同僚から借りた下記の本を電車の中で読んで、このCASE 式について詳しく知りました。それ以外の事は全部日常使っている技術だったので、DB 使いな僕的にはホットしたところでした・・-
既存のコーJn10;体系を新しい体系に変換する(DECODE 関数の変わり)
-
Views(4650) | Comments(11) |
In:
web develop
|
(06/15)
UBUNTU下X61硬件功能安装
[SQL の CASE 式って知ってますか]的回复
-
cheng
于
2008-07-07 15:37:51
发表 |
IP:123.108.209.*
神呀,柠檬,你这日本是自己写的,还是copy来的。。。。

好久不写日志,一写俺们还看不懂。
-
ZZZzzz
于
2008-07-07 15:50:33
发表 |
IP:152.104.150.*
nippon 语不懂の说
-
柠檬园主
于
2008-07-07 17:45:06
发表 |
IP:221.201.150.*
呃。。。复制过来的,虽然看得懂,但要我写,还是写不出这水平的。。。。
- 4# 大雾 于 2008-07-09 07:45:05 发表 | IP:123.120.205.*
打死大柠檬~~~~

- 5# 柠檬园主 于 2008-07-09 10:47:40 发表 | IP:221.201.145.*
好嘛好嘛,我明天就开始写正常日记。。。。。
- 6# 大雾 于 2008-07-10 12:38:02 发表 | IP:123.120.203.*
大柠檬给介绍下WII吧,我最近开始长草,天天恳求大毛成给我买一个玩~~~你也劝劝他吧:)
- 7# TRACY 于 2008-07-10 19:30:31 发表 | IP:124.93.18.*
WII 好好玩.... 劝毛成劝毛成....

- 8# cheng 于 2008-07-11 12:36:02 发表 | IP:123.108.209.*
嗨,楼上的几位,你们不用劝了!
因为我决定买了。哈哈哈。。
- 9# TRACY 于 2008-07-14 21:48:48 发表 | IP:124.93.19.*
买了好哇,我们去了北京到你们家玩儿...
- 10# Tract 于 2008-07-14 22:39:31 发表 | IP:124.93.19.*
楼上是盗版。。。
- 11# 柠檬园主 于 2008-07-14 22:55:57 发表 | IP:124.93.18.*
我晕,又乱了。
