skillup

技術ブログ

Database

CASE式のすすめ その2

投稿日:2016年11月3日 更新日:

本日も「達人に学ぶSQL徹底指南書」を地道に進めていきます。

CASE式の利用

私自身はCHECK制約を使ったことはないですが、正しいテーブル設計においてはこれがあると誤ったデータを入れることを防ぐことができます。

例 会計年度のはじめと終わりを定義したのに、終わりのほうが昔になっているなど。

またCASE式ではCHECK制約と相性がいいです。

使い方については本家を参考に。

CHECK制約はNOT NULLやUNIQUE同様正しい値のみを格納できるので積極的に使っていく必要ありかもです。

制約に関していろいろ↓

【初級編⑨】テーブルに設定するキーの種類や様々な制約(CONSTRAINT)
SQLの制約の種類とその指定方法

UPDATE文のCASE

CASE式は条件分岐にも使えます。

例えば下記のようなテーブルsalarytbがあるとします。

name | salary
——+———
相田 | 200000
田中 | 300000

ここで以下のような条件で更新するとします。

  • 30万以上の社員は15%アップ
  • 20万以上30万未満(299999以下)の社員は20%アップ

これも1行で以下のように書けます。

この場合、UPDATE文を2回すると290000の社員は2回昇給をしてしまいます。

テーブル同士のマッチング

CASE式の大きな利点は式を評価でき、bETWEENやLIKE、大小判定などが使えることです。

テーブル名 CourseMaster
course_id | course_name
———–+————-
1 | 経理入門
2 | 財務知識
3 | 簿記検定
4 | 税理士

テーブル名  OpenCourse
month | course_id
——–+———–
200706 | 1
200706 | 3
200706 | 4
200707 | 4
200708 | 2
200708 | 4

ここで下記のような表を作りたいとします。

course_name | 6月 | 7月 | 8月
————-+—–+—–+—–
経理入門 | ○ | × | ×
財務知識 | × | × | ○
簿記検定 | ○ | × | ×
税理士 | ○ | ○ | ○

この場合、下記のようにSQLを書けばOKです。

EXISTSを使っても似たようなものができますね。

コツとしてはまず骨組みとなるSQL(外の部分のSQL)を作ってから細かいもの(中の詳細な条件)を組み立てていくのがいいのかなと思っております。

-Database
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

データベース設計のアンチパターン 複数表結合,大作SQL,Blob型の乱用

データベースのアンチパターンに関して。 以前下記ブログでも書いたんですが設計のスキルに関してもう少し身に着ける必要があるとおもい、チェックします。 論理設計のグレーノウハウ サロゲートキー 論理設計の …

no image

データベース設計のアンチパターン 重すぎるOLTP+Date型不統一+データ量想定が甘い

Contents1 重すぎるOLTP1.1 デメリット1.2 対策2 DATE型の型の不統一2.1 デメリット2.2 対策3 データ量の想定が甘い3.1 デメリット3.2 対策 重すぎるOLTP ※O …

no image

第二、第三の正規化&ER図&Check制約

前回第一正規化を話したので、第二、第三に進んでいきます。 Contents1 第二正規化とは?2 第三正規化とは?3 正規化のメリット4 ER図5 本日のSQLネタ Check制約 第二正規化とは? …

no image

SQL 更新系に関して

SQL実践入門、残り2章になりましたが、いやーむずいっす。 今回は9章を進めていますがSQLはもともと検索を主な用途として発展したため、SELECT文の使用がメインになります。 ですが、UPDATE文 …

no image

データベース設計のアンチパターン リトライ+バッチ分割+バッチの再利用不可

Contents1 リトライ1.1 デメリット1.2 対策2 バッチ分割2.1 デメリット2.2 対策3 バッチ再利用不可3.1 デメリット3.2 対策 リトライ ※OLTP=オンライントランザクショ …