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円