logo
     

メニュー
↓ SQL ↓
●データ取得の基本(SELECT)

●取得条件の指定(WHERE)

●計算式を利用する

●取得データの並べ替え
      (ORDER BY)


●別名を付ける

●データを集計(グループ化)する

●テーブルの結合
      (INNER JOIN)


●テーブルの結合
      (OUTER JOIN)


●テーブルの結合
      (CROSS JOIN)


●重複行の排除(DISTINCT)

●副問い合わせ(サブクエリ)

●相関副問い合わせ
      (相関サブクエリ)


●クエリの結合

●文字列値を連結する

●文字列の一部を取り出す

●文字列を置換する

●NULLを置き換える

⇒条件によって置き換える

↓SQL Server 2012 Express↓
●SQL Server 2012 Express
      インストール


●SQL Server 2012 Express
      ネットワークの構成


●SQL Server 2012 Express
      ログインユーザの作成


●SQL Server 2012 Express
      データベースの作成


●SQL Server 2012 Express
      テーブルの作成


●SQL Server 2012 Express
      SQLの実行


●復旧モデルとバックアップ

↓ 番外編 ↓
●Windows Server 2012 評価版
      インストール


●Windows Server 2012
      スタートメニュー利用方法


●Windows Server 2012
      シャットダウン・再起動方法


●Windows Server 2012
      サーバーマネージャ自動起動無効


●Windows Server 2012
      コンピュータ名・ドメイン変更


条件によって置き換える (CASE,DECODE,IIF,IF)


―ORACLEの場合―
条件によって返す値を置き換えるには、CASE,DECODEを利用します。
CASEには、ある項目・値・式との一致の比較をする「単純CASE式」と、
評価式を複数記述する「検索CASE式」があります。
一方DECODEは基本的に、ある項目・値・式との一致を比較します。

単純CASE式
文法:CASE <比較元の列名、式、値など>
    WHEN <比較する列名、式、値など> THEN <返す列名、式、値など>
    [WHEN <比較する列名、式、値など> THEN <返す列名、式、値など>]
    [ELSE <上記に該当しない場合に返す列名、式、値など>]
   END
※ELSEを省略した場合は、WHENに該当しなければNULLを返します

検索CASE式
文法:CASE
    WHEN <比較式など> THEN <返す列名、式、値など>
    [WHEN <比較式など> THEN <返す列名、式、値など>]
    [ELSE <上記に該当しない場合に返す列名、式、値など>]
   END
※ELSEを省略した場合は、WHENに該当しなければNULLを返します

DECODE
文法:DECODE(<比較元の列名、式、値など>,
    <比較する列名、式、値など>, <返す列名、式、値など>
    [,<比較する列名、式、値など>, <返す列名、式、値など>…]
    [,<上記に該当しない場合に返す列名、式、値など>]
   )
※<上記に該当しない場合に返す列名、式、値など>を省略した場合は、
 全てに該当しなければNULLを返します


―SQL Serverの場合―
条件によって返す値を置き換えるには、CASE,IIFを利用します。
(IIFはSQL Server 2012で対応)
CASEには、ある項目・値・式との一致の比較をする「単純CASE式」と、
評価式を複数記述する「検索CASE式」があります。
一方IIFは、ブール式(True/Falseを返す式)の条件がTrueかFalseかで返す値を置き換えるものです。

単純CASE式
文法:CASE <比較元の列名、式、値など>
    WHEN <比較する列名、式、値など> THEN <返す列名、式、値など>
    [WHEN <比較する列名、式、値など> THEN <返す列名、式、値など>]
    [ELSE <上記に該当しない場合に返す列名、式、値など>]
   END
※ELSEを省略した場合は、WHENに該当しなければNULLを返します

検索CASE式
文法:CASE
    WHEN <比較式など> THEN <返す列名、式、値など>
    [WHEN <比較式など> THEN <返す列名、式、値など>]
    [ELSE <上記に該当しない場合に返す列名、式、値など>]
   END
※ELSEを省略した場合は、WHENに該当しなければNULLを返します

IIF
文法:IIF(<ブール式の条件>,
     <Trueの場合に返す列名、式、値など>,
     <Falseの場合に返す列名、式、値など>
   )


―PostgreSQLの場合―
条件によって返す値を置き換えるには、CASEを利用します。
CASEには、ある項目・値・式との一致の比較をする「単純CASE式」と、
評価式を複数記述する「検索CASE式」があります。

単純CASE式
文法:CASE <比較元の列名、式、値など>
    WHEN <比較する列名、式、値など> THEN <返す列名、式、値など>
    [WHEN <比較する列名、式、値など> THEN <返す列名、式、値など>]
    [ELSE <上記に該当しない場合に返す列名、式、値など>]
   END
※ELSEを省略した場合は、WHENに該当しなければNULLを返します

検索CASE式
文法:CASE
    WHEN <比較式など> THEN <返す列名、式、値など>
    [WHEN <比較式など> THEN <返す列名、式、値など>]
    [ELSE <上記に該当しない場合に返す列名、式、値など>]
   END
※ELSEを省略した場合は、WHENに該当しなければNULLを返します


―MySQLの場合―
条件によって返す値を置き換えるには、CASE,IFを利用します。
CASEには、ある項目・値・式との一致の比較をする「単純CASE式」と、
評価式を複数記述する「検索CASE式」があります。
一方IFは、ブール式(True/Falseを返す式)の条件がTrueかFalseかで返す値を置き換えるものです。

単純CASE式
文法:CASE <比較元の列名、式、値など>
    WHEN <比較する列名、式、値など> THEN <返す列名、式、値など>
    [WHEN <比較する列名、式、値など> THEN <返す列名、式、値など>]
    [ELSE <上記に該当しない場合に返す列名、式、値など>]
   END
※ELSEを省略した場合は、WHENに該当しなければNULLを返します

検索CASE式
文法:CASE
    WHEN <比較式など> THEN <返す列名、式、値など>
    [WHEN <比較式など> THEN <返す列名、式、値など>]
    [ELSE <上記に該当しない場合に返す列名、式、値など>]
   END
※ELSEを省略した場合は、WHENに該当しなければNULLを返します

IF
文法:IF(<ブール式の条件>,
     <Trueの場合に返す列名、式、値など>,
     <Falseの場合に返す列名、式、値など>
   )


***例1***
・性別コードが1の場合は"男性"、2の場合は"女性"、それ以外は"不明"を返す
[社員マスタ]
社員コード 氏名 性別コード
001 テスト一郎 1
002 テスト花子 2
003 テスト二郎 0
004 テスト桜子 2

[実行SQL]
--単純CASE式(Oracle,SQL Server,PostgreSQL,MySQL)--
SELECT
  社員コード, 氏名,
  (CASE 性別コード
   WHEN 1 THEN '男性'
   WHEN 2 THEN '女性'
   ELSE '不明'
  END) AS 性別
FROM
  社員マスタ

--検索CASE式(Oracle,SQL Server,PostgreSQL,MySQL)--
SELECT
  社員コード, 氏名,
  (CASE
   WHEN 性別コード = 1 THEN '男性'
   WHEN 性別コード = 2 THEN '女性'
   ELSE '不明'
  END) AS 性別
FROM
  社員マスタ

--DECODE(Oracle)--
SELECT
  社員コード, 氏名,
  DECODE(性別コード, 1, '男性', 2, '女性', '不明') AS 性別
FROM
  社員マスタ

--IIF(SQL Server)--
SELECT
  社員コード, 氏名,
  IIF(性別コード = 1, '男性',
    IIF(性別コード = 2, '女性', '不明')) AS 性別
FROM
  社員マスタ

--IF(MySQL)--
SELECT
  社員コード, 氏名,
  IF(性別コード = 1, '男性',
    IF(性別コード = 2, '女性', '不明')) AS 性別
FROM
  社員マスタ

[結果]
社員コード 氏名 性別
001 テスト一郎 男性
002 テスト花子 女性
003 テスト二郎 不明
004 テスト桜子 女性


***例2***
・売上金額が5,000円以上はAを、2,000円以上はBを、それ以外はCを返す
[売上表]
商品名 売上金額
りんご 2500
みかん 1200
ぶどう 3000
バナナ 8000

[実行SQL]
--検索CASE式(Oracle,SQL Server,PostgreSQL,MySQL)--
SELECT
  商品名, 売上金額,
  (CASE
   WHEN 売上金額 >= 5000 THEN 'A'
   WHEN 売上金額 >= 2000 THEN 'B'
   ELSE 'C'
  END) AS ランク
FROM
  売上表

--DECODE(Oracle)--
SELECT
  商品名, 売上金額,
  DECODE(SIGN(売上金額 - 5000),
   1, 'A',
   0, 'A',
   DECODE(SIGN(売上金額 - 2000), 1, 'B', 0, 'B', 'C')
  ) AS ランク
FROM
  売上表
※SIGNは引数がマイナスなら-1を、0なら0を、プラスなら1を返す関数

--IIF(SQL Server)--
SELECT
  商品名, 売上金額,
  IIF(売上金額 >= 5000, 'A',
    IIF(売上金額 >= 2000, 'B', 'C')) AS ランク
FROM
  売上表

--IF(MySQL)--
SELECT
  商品名, 売上金額,
  IF(売上金額 >= 5000, 'A',
    IF(売上金額 >= 2000, 'B', 'C')) AS ランク
FROM
  売上表

[結果]
商品名 売上金額 ランク
りんご 2500 B
みかん 1200 C
ぶどう 3000 B
バナナ 8000 A

<<PR>> ネットワークセキュリティを見直しませんか
価格:300円
現役SEが語るSEの仕事あれこれ-これから就職を希望する人へ-
価格:300円