ラベル SQL の投稿を表示しています。 すべての投稿を表示
ラベル SQL の投稿を表示しています。 すべての投稿を表示

2020年10月17日土曜日

よく使うSQL文をまとめておく

個人的によく使用するSQLをまとめてみました。

(1)昇順・降順
 SELECT * FROM テーブル ORDER BY 要素

   例)SELECT * FROM scores ORDER BY name;
【参考URL】 

https://qiita.com/YumaInaura/items/1a1123ed4f33d30d9548
https://www.sejuku.net/blog/72964

(2) 数える COUNT

テーブル内に「同じ値の要素数」を表示する

SELECT COUNT (DISTINCT item_num) FROM items;
【参考URL】 

https://www.ibm.com/support/knowledgecenter/ja/SSGU8G_12.1.0/com.ibm.sqls.doc/ids_sqs_1581.htm

 https://qiita.com/YumaInaura/items/1a1123ed4f33d30d9548

 

【例】テーブルからExchangeグループでカウントする

 SELECT Exchange , count(1)
    From  [TA_Order].[dbo].[Alert] with (nolock)
    where TransactDay = '20200910'
    group by Exchange
    order by Exchange
 

 
(3)固有値 DISTINCT
SELECT文の実行結果の重複レコード(データ行)を1つにまとめる
SELECT DISTINCT 列名,列名... FROM テーブル名 
https://www.sejuku.net/blog/54990

(4)WHERE

【参考URL】

https://rfs.jp/sb/sql/s03/03_2-2.html

①ワイルドカード

・アンダスコア記号(_)
任意の1文字にマッチする。
・パーセント記号(%)
   0個以上のの連続した文字にマッチする。 
  
 例)SELECT * FROM customer WHERE fullname LIKE 'マディ%';
 
【参考URL】
 https://rfs.jp/sb/sql/s03/03_2-2.html 
 
②IN演算子 
IN演算子は対象の値が指定した値のリストの中にあるかを判定します。 
 
例)顧客テーブル(customer)から、[年齢(age)]フィールドの値が28、38、48の行を選択しています。
SELECT fullname, age FROM customer WHERE age IN(28, 38, 48);
 
 

 

 

 

 

 

 

2016年12月29日木曜日

【SQL】SQL Server Management Studio の操作方法など

SQLの基礎、SQL Server、SQL Server Management Studioについて、詳しく書いてあるサイトがありいました。

http://kaya-soft.com/sqlserver2008-toranomaki/page/2/
http://kaya-soft.com/sqlserver2008-toranomaki/

詳しく書いてあるので、ちょっと長いので、少しまとめてみました。

1、SQLServer Management Studioの使い方
SQLServerにアクセスするためには、「SQLServer Management Studio」を介してデータベースを操作します。
 (1) 起動
「スタート」メニュー → 「すべてのプログラム」 → 「SQLServer 2008」 → 「SQLServer Management Studio」を選択
(2) テーブルを開いてデータを入力
オブジェクトエクスプローラに表示しているテーブルを選択しながら右クリックし、「上位200行の編集」をクリックする。あとはセルを選択して、値を入力します。Enter/Tabで入力キーの確定処理が行われます。
(3) テーブルを参照モードで開く
「オブジェクトエクスプローラ」で当該テーブルを選択しながら右クリックし、表示されたメニューの「上位1000行の選択」をクリックします。
右上は、「クエリエディタ」と言って、SQLを記述するエリアになります。
右下にテーブルのレコードが表示されていますが、要するにクエリエディタで記述したSQLを実行した結果を下に表示していることになります。

2、SQL
Management Studio で、ログインに成功したら、画面左上の「新しいクエリ」ボタンをクリックします。
左上のドロップダウンには接続先のデータベースが表示されており、変更したいDBを選択します。
クエリエディタでクエリ入力して、下のようなのSQLを記述し、「!実行(X)」ボタンをクリックして実行する(「F5」や「Ctrl + E」 で可能)
※F5を押して実行される時に、マウスで範囲選択している場合は、その選択されている部分だけが実行される。クエリを2つ書いておいて、使い分けたい時とか、WHEREを書いている場合に、WHEREを指定しなかった場合はどういう結果かを見たいときとかに便利です。

(1) テーブルにデータを追加(INSERT文を使う)
INSERT INTO テーブル名(列名1, 列名2, ・・・)
VALUES(値1, 値2, ・・・)
⇒(例)
INSERT INTO TableA(社員番号, 名前, 年齢, 性別, 生年月日, 給料)
VALUES('00001', '木村太郎', '36', '男', '1977/05/04', 360000)

(2) データを参照する(SELECT文を使う)
SELECT *
FROM テーブル名
WHERE 絞り込む条件
⇒(例)
SELECT *
FROM TableA
WHERE 性別 = '男'

・「SELECT 列名 AS 表示する列名」で指定したAS の後ろに書いた文字は、SELECT結果の表示列名(見出し)になります
・SELECTした結果を並び替えるには「ORDER BY」句を使用します
[ASC]の場合は昇順、[DESC]の場合は降順に並べ替えられます(省略は「ASC」)。
・テーブル内に重複するデータがある場合「DISTINCT」を使用すれば重複を取り除けます
・SELECTで取得するデータに条件を指定して絞り込む場合、WHERE句を使用します
・数値や日付をFrom~Toで範囲指定する場合は「BETWEEN」を使用します
・ある列が、複数の値の中からどれか一つに該当するかどうか、という条件を指定する場合は、「IN」を使います。例えば、社員番号が「00001」か「00002」か「00003」のどれかに該当するデータを抽出するには、「WHERE 社員番号 IN ('00001', '00002', '00003'
)」と記述する(「WHERE 社員番号 = '00001' OR 社員番号 = '00002' OR 社員番号 = '00003'」と同じ意味) ・NULLを含むデータがある場合、NULLを検索条件で指定する場合は「IS NULL」を使用します(= NULL」ではない)。
・文字列であいまい検索する場合は、「LIKE」を使います。%」は0文字以上の任意の文字列を表し、_は任意の1文字を表すことができます。
 ⇒(例)
SELECT *
FROM TableA
WHERE 名前 LIKE '%鈴木%'
 
(3) 上位 N 件の取得
SELECT TOP N 列名1, 列名2, ・・・
FROM テーブル名

(4) データを更新する (UPDATE文を使う)
UPDATE テーブル名 SET
更新する列名1 = 更新する値1, 更新する列名2 = 更新する値2, ・・・
WHERE 更新するレコードを特定する為の条件
⇒(例)
UPDATE TableA SET
給料 = 300000
WHERE 社員番号 = '00001'
(5) レコードを削除する(DELETE文を使う)
DELETE FROM テーブル名
WHERE 削除するレコードを特定する為の条件
⇒(例)
DELETE FROM TableA
WHERE 社員番号 = '00002'
(6) ビュー(View)の作り方
オブジェクトエクスプローラから、「ビュー」というところを選択し、右クリックメニューから「新しいビュー」をクリックする。
「テーブルの追加」画面が開きますので、対象テーブルします。
クエリ作成対象の[TableA]を選択して「追加」ボタンをクリックすると、Management Studio 本体の方に追加されます。
あとは、ペインを使って、選択作業を行って、実行でViewを作成します。

3、関数
SELECTやWHEREで関数が使用できます。
(1) 【文字列】RIGHT ある文字列の右端から、指定した文字数分だけ取得する
  SELECT RIGHT('ABCDEF', 3) ⇒ 'DEF'
 
(2) 【文字列】LEFT ある文字列の左端から、指定した文字数分だけ取得する
    SELECT LEFT('ABCDEF', 3) ⇒ 'ABC   DEFGHI'
 
(3) 【文字列】RTRIM ある文字列の右端から空白を取り除く
    SELECT RTRIM('   ABC   DEF   ') + 'GHI' ⇒ '   ABC   DEFGHI'
 
(4) 【文字列】LTRIM ある文字列の左端から空白を取り除く
    SELECT LTRIM('   ABC   DEF   ') + 'GHI' ⇒ 'ABC   DEF   GHI'
 
(5) 【文字列】REPLACE ある文字列の中で、特定の文字列を別の文字列に置換する
    SELECT REPLACE('ABCDE', 'BCD', 'BCDBCD')⇒ 'ABCDBCDE'
 
(6) 【文字列】SUBSTRING ある文字列の中で、特定の位置から指定した文字数分だけ取得する
    SELECT SUBSTRING('ABCDE', 3, 2)⇒ 'CD'
 
(7) 【文字列】UPPER ある文字列を大文字に変換する
    SELECT UPPER('abcあいう012')⇒ 'ABCあいう012'
 
(8) 【文字列】LOWER ある文字列を小文字に変換する
    SELECT LOWER('ABCあいう012')⇒ 'abcあいう012'
 
(9) 【文字列】LEN ある文字列の文字数を取得する
    SELECT LEN('ABCあいう012') ⇒ 9 
 
(10) 【日付・時刻】GETDATE / SYSDATETIME システム日付(SQL Serverがインストールされたマシンの日付)を取得する
    (戻り値の型がGETDATEの場合はDATETIME型で、SYSDATETIMEの場合はDATETIME2型)
    SELECT GETDATE(), SYSDATETIME()⇒ 2016-01-04 15:49:32.380 2016-01-04 15:49:32.38
 
(11) 【日付・時刻】YEAR ある日付の年の部分だけ取得する
    SELECT YEAR(GETDATE())⇒ 2016
 
(12) 【日付・時刻】MONTH ある日付の月の部分だけ取得する
    SELECT MONTH(GETDATE()) ⇒ 1
 
(13) 【日付・時刻】DAY ある日付の日の部分だけ取得する
    SELECT DAY(GETDATE()) ⇒ 4
 
(14) 【日付・時刻】DATEPART ある日付の一部だけを取得する
    SELECT DATEPART(YEAR        , GETDATE())    AS
      ,DATEPART(MONTH       , GETDATE())    AS
      ,DATEPART(DAY         , GETDATE())    AS
      ,DATEPART(HOUR        , GETDATE())    AS
      ,DATEPART(MINUTE      , GETDATE())    AS
      ,DATEPART(SECOND      , GETDATE())    AS
      ,DATEPART(MILLISECOND , GETDATE())    AS ミリ秒
      ,DATEPART(NANOSECOND  , GETDATE())    AS ナノ秒
      年       月        日        時        分        秒      ミリ秒         ナノ秒
     2014      1        4        16         34       52       40    40000000
 
(15) 【日付・時刻】DATEADD 日付を加算したり減算したりする
    SELECT DATEADD(d,  1, '2014/01/01') ,DATEADD(d, -1, '2014/01/01')
     ⇒ 2014-01-02 00:00:00.000 2013-12-31 00:00:00.000
 
(16) 【日付・時刻】DATEDIFF 2つの日付の差を求める
    SELECT DATEDIFF(d, '2014/01/01', '2014/01/01')
      ,DATEDIFF(d, '2014/01/01', '2014/01/02')
      ,DATEDIFF(d, '2014/01/02', '2014/01/01')
      ⇒ 0           1           -1
 
(17) 【変換】CAST データ型を変換する
    SELECT CAST('012' AS INT) ,CAST(12 AS VARCHAR)  ⇒ 12(INT型) 12(VARCHAR型)
 
(18) 【変換】CONVERT データ型を変換する
    SELECT CONVERT(VARCHAR, GETDATE(),111) AS 'yyyy/mm/dd'
          ,CONVERT(VARCHAR, GETDATE(),112) AS 'yyyymmdd'
          ,CONVERT(VARCHAR, GETDATE(),120) AS 'yyyy-mm-dd hh:mi:ss'
          ,CONVERT(VARCHAR, GETDATE(),121) AS 'yyyy-mm-dd hh:mi:ss.mmm'

 yyyy/mm/dd    yyyymmdd     yyyy-mm-dd hh:mi:ss    yyyy-mm-dd hh:mi:ss.mmm

  2014/01/02    20140102    2014-01-02 21:21:06      2014-01-02 21:21:06.383

 
※書式(スタイル):111(年/月/日(yyyy/mm/dd)),112(年月日(yyyymmdd)),120(年-月-日 時:分:秒(yyyy-mm-dd hh:mi:ss)),121(年-月-日 時:分:秒.ミリ秒(yyyy-mm-dd hh:mi:ss.mmm))
 

(19) 【数値】ROUND 四捨五入する
  有効桁数は、正の値を指定した場合は小数点以下の桁数に、負の値を指定した場合は、小数点から左の桁数にまで丸めます。
   SELECT ROUND(123.445, 2)
      ,ROUND(123.445, -2)
      ,ROUND(153.445, -2)
 123.450  小数点以下第三位を四捨五入し、第二までを求めている
   100.000  小数点の左二桁目を四捨五入し、2の為繰り上がらず100となる
   200.000 小数点の左二桁目を四捨五入し、5の為繰り上がり200となる
 
(20) 【数値】POWER 階乗を求める
  SELECT POWER(2, 3) ⇒ 8

(21) 【数値】RAND 0から1までの範囲のランダムな数字を求める
   SELECT RAND(), RAND(), RAND()
   ⇒ 0.273604264024087 0.949061768386125  0.880059316061561

(22) 【数値】CEILING 小数点以下を切り上げる
   SELECT CEILING(1)
      ,CEILING(1.1)
      ,CEILING(1.9)
   ⇒ 1 2 2

(23) 【数値】FLOOR 小数点以下を切り捨てる
   SELECT FLOOR(1)
      ,FLOOR(1.1)
      ,FLOOR(2.1)
   ⇒ 1 1 2

(24) 【数値】SQRT 平方根を求める
   SELECT SQRT(2)   ⇒ 1.4142135623731
 

4、集計を行う
(1) SUM 合計を求める
  SELECT SUM(給料)
    FROM TableA

(2) AVG 平均を求める
  SELECT AVG(給料)
    FROM TableA
 
・集計対象がNULLを許容する列の場合は「IS NULL(NULLを指定値に置換)」をしておく
    SELECT AVG(ISNULL(給料, 0))   AS 'AVG(給料)'
      ,COUNT(ISNULL(給料, 0)) AS 'COUNT(給料)'
      FROM TableA


・GROUP BYを使用して、「性別毎の平均年齢」とかなら集計する
    SELECT 性別, AVG(年齢)
      FROM TableA
      GROUP BY 性別
 

・HAVINGを使って、「平均年齢が30才未満の性別」で絞り込みます
    SELECT 性別, AVG(年齢)
      FROM TableA
      GROUP BY 性別
       HAVING AVG(年齢) < 30

(3) MAX 最大値を求める
  SELECT MAX(給料)
    FROM TableA

(4) MIN 最小値を求める
  SELECT MIN(給料)
    FROM TableA

(5) COUNT 個数(行数)をカウントする
  SELECT COUNT(*)
    FROM TableA

2016年12月22日木曜日

【SQL Server】BCPコマンドを利用したデータベースデータのインポート/エクスポート

bcpを使ったデータベースのインポート+エキスポートについて、調べたのでまとめてみました。

1、構文
bcp ユーティリティは、ユーザーが指定した形式で、データを Microsoft® SQL Server™ 2000 とデータ ファイルとの間でコピーします。

bcp {[[database_name.][owner].]{table_name | view_name} | "query"}
     {in | out | queryout | format} data_file
     [-m max_errors] [-f format_file] [-e err_file]
     [-F first_row] [-L last_row] [-b batch_size]
     [-n] [-c] [-w] [-N] [-V (60 | 65 | 70)] [-6]
     [-q] [-C code_page] [-t field_term] [-r row_term]
     [-i input_file] [-o output_file] [-a packet_size]
     [-S server_name[\instance_name]] [-U login_id] [-P password]
     [-T] [-v] [-R] [-k] [-E] [-h "hint [,...n]"]

【引数】
database_name データベースの名前
owner                テーブルの名前
table_name        コピー先(元)のテーブルの名前
query                  結果セットを返す Transact-SQLのクエリ
                         ※クエリ全体を二重引用符で囲んでください。クエリからデータを一括コピーする場合には、queryout も指定します。

in | out | queryout | format 一括コピーする方向
 ※in は、ファイルからデータベース テーブルまたはビューにコピーします。out は、データベース テーブルまたはビューからファイルにコピーします。queryout は、クエリからデータの一括コピーを行う場合に指定します。format オプションは、指定したオプション (-n、-c、-w、-6、-N のいずれか) とテーブルまたはビューの区切り記号に基づいてフォーマット ファイルを作成します。format を使用する場合、-f オプションも指定する必要があります。
data_file          コピー先(元)のデータ ファイルのフル パス

-n                     データのネイティブ (データベース) データ型を使用して一括コピー操作を実行
-c                     文字データ型を使用して一括コピー操作を実行

-S server_name[\instance_name] 接続先の SQL Server のインスタンスを指定
-U login_id                                   SQL Server への接続に使用されるログイン ID
-P password                                  ログイン ID のパスワード

 2、説明
bcpを利用し、以下のようなことができる。
なお、コマンドプロンプトから実行することができます(batファイルを作成して、クリックして実行します)。
(1) 指定したテーブルのデータをテキストファイルに出力する。
【構文】
       bcp データベース名.所有者.テーブル名 out "出力パス" -c -S サーバ名 -U ユーザID -P パスワード
【例】
masterデータベースのtestテーブルのデータを"C:\test.txt"に全件出力する。
   bcp master..test out "C:\test.txt" -c -S SrvAsa -U asa -P aaa

(2) 指定したクエリで取得したデータをファイルに出力する。
【構文】
       bcp "SQL文" queryout "出力パス" -n -S サーバ名 -U ユーザID -P パスワード
【例】
masterデータベースのtestテーブルのデータをクエリを使って抽出して、"C:\test.bcp"に出力する。
       bcp "SELECT * from master..test where SystemDay between 20130401 and 20161130" queryout
           "C:\test.bcp" -n -S SrvAsa  -U asa -P aaa


(3) 指定したファイルのデータを指定したテーブルに取り込む。
【構文】
      bcp データベース名.所有者.テーブル名 in "入力パス" -n -S サーバ名(インスタンス名) -U ユーザID -P パスワード
【例】
テキストファイル("C:\test.bcp")のデータを指定したテーブル(masterデータベースのtestテーブル)に取り込む
        bcp master..systypes in "C:\test.bcp" -n -S SrvAsa -U asa -P aaa

実作業としては、(2),(3)を利用して、(2)と(3)の間でtruncate(テーブルから全ての行を削除)を行い、データベースの再作成を行たりします。

【参考URL】
http://blog.livedoor.jp/akf0/archives/51354837.html
https://msdn.microsoft.com/ja-jp/library/ms162802.aspx
http://dalmore.blog7.fc2.com/blog-entry-17.html
https://msdn.microsoft.com/ja-jp/library/aa174646(SQL.80).aspx

2016年12月15日木曜日

【SQL】SQLのお勉強(2)

続きです。

5、集計とグループ化
(1) 集計関数(SUM/MAX/MIN/AVG/COUNT)
SELECT
   SUM(出金額) AS 合計出金額,
   AVG(出金額) AS 平均出金額,
   MAX(出金額) AS 最大出金額,
   MIN(出金額) AS 最小出金額
FROM 家計簿



(2) COUNT
・COUNT(*)は、NULLを含めた行数をカウントする。COUNT(列)は、指定列の値がNULLである行を無視して数える
・重複した値を除いた集計
 SELECT COUNT(DISTINCT 費目) FROM 家計簿
・SELECT文の選択列リスト部分、HAVING句で使用

(3) グループ化
【構文】
SELECT グループ化の基準列名・・・, 集計関数
  FROM テーブル名
(WHERE 絞り込み条件)
GROUP BY グループ化の基準列名・・・
【例】費目でグループ化
SELECT 費目, SUM(出金額) AS 費目の出金額の合計
  FROM 家計簿
GROUP BY 費目

(4) HAVING(絞り込み)
【構文】
SELECT グループ化の基準列名・・・, 集計関数
  FROM テーブル名
(WHERE 絞り込み条件)
GROUP BY グループ化の基準列名・・・
HAVING 集計結果に対する絞り込み条件
【例】
SELECT 費目, SUM(出金額) AS 費目の出金額の合計
  FROM 家計簿
GROUP BY 費目
HAVING SUM(出金額) > 0


【SELECT文まとめ】
SELECT 選択列リスト
   FROM テーブル名
(WHERE 条件式)
(GROUP BY グループ化列名)
(HAVING 集計結果に対する条件式)
(ORDER BY 並び替え列名)
※ORDER BY は必ず最後に記述

6、副問い合わせ
ほかのSQL文の一部分として登場するSELECT文。丸カッコでくくって記述する。
(1) 2回のSELECTが必要な場合:ネスト構造
例)最大の出費に関する費目と金額を求める
SELECT 費目,出金額 FROM 家計簿
WHERE 出金額 = ( SELECT MAX(出金額) FROM 家計簿)
 → ( SELECT MAX(出金額) FROM 家計簿)を「サブクエリ」という
(2) 副問い合わせの結果から、確実にNULLを除外する方法
例1)
SELECT * FROM 家計簿アーカイブ
WHERE 費目 IN ( SELECT  費目 FROM 家計簿
   WHERE 費目 IS NOT NULL)

例2)
SELECT * FROM 家計簿アーカイブ
WHERE 費目 IN ( SELECT  COALESCE(費目,'不明') FROM 家計簿)

  →費目がNULLなら、代わりに'不明'にする
(3) INSERTの特殊構文(VALUES以降の記述に相当する内容をSELECTで定義)
INSERT INTO 家計簿集計(費目,合計,平均,回数)
SELECT 費目, SUM(出金額), AVG(出金額),0
FROM 家計簿
WHERE 出金額 > 0
GROUP BY 費目


【参考URL】
http://www.sql-reference.com/index.html#subquery

2016年12月14日水曜日

【SQL】SQLのお勉強(1)

本「スッキリわかるSQL入門 ドリル215問付き!」を使ってSQLの勉強します。
http://book.impress.co.jp/books/1111101167

dokoQL(どこきゅーえる)は、ブラウザだけでSQLの編集と実行を行える学習用クラウドサービスです。
→「その他」でユーザ登録する(ただし、本を購入して使用してください、との事です)
http://dokoql.com/d/app.html

dokoQL ヘルプは、以下参照
http://dokoql.com/help

DBのインストール手順などは、以下URLに記載しているとの事
http://devnote.jp/index.html

1、例文(SELECT/INSERT/UPDATE/DELETE)
1) sample1 : 検索 (SELECT:ある条件を満たす行を探して、取得)
SELECT 出金額
FROM 家計簿


2) sample2: 検索
SELECT 日付,費目,メモ,入金額,出金額
FROM 家計簿


SELECT *
FROM 家計簿

※DBのデータが変更する場合があるので、*の濫用に注意

3) sample3: 取得
SELECT 日付,費目,メモ,入金額,出金額
FROM 家計簿
WHERE 出金額 > 3000


(別名定義)ASを使用する
SELECT  費目 AS ITEM,入金額 AS RECEIVE,出金額 AS PAY
FROM 家計簿 AS MONEYBOOK
WHERE 費目 = '給料'

→WHERE '費目' = '給料'としないこと(間違えて、はまった)
4) sample4: 挿入
INSERT INTO 家計簿
VALUES ('2013-02-25','居住費','3月の家賃',0,85000)


5) sample5: 更新 (UPDATE:ある条件を満たす行を探して、書き換える)
UPDATE 家計簿
SET 出金額 = 90000
WHERE 日付 = '2013-02-25'


6) sample5: 削除 (DELETE:ある条件を満たす行を探して、削除する)
DELETE FROM 家計簿
WHERE 日付 = '2013-02-25'


2、絞り込み
(1)WHERE
・WHEREを指定しないと「すべての行」が処理対象
・SELECT/UPDATE/DELETE文で使用可能
・WHEREの後ろには条件式(TRUE/FALSE判別)を記述
 ※NULL判別は「出金額 IS NULL/出金額 IS NOT NULL」として、= または<>は使用できません

(2) 「式 LIKE パターン文字列」
 →%:任意の0文字以上の文字列、_:任意の1文字
  →%を特殊文字と判別する場合、ESCAPE句を併用する
  SELECT  * FROM 家計簿
   WHERE メモ LIKE '%100$$%' ESCAPE '$'


(3) 「式 BETWEEN 値1 AND 値2」
SELECT  * FROM 家計簿
WHERE 出金額 BETWEEN 100 AND 3000

(4) 複数値との比較「式 IN (値1, 値2, 値3, ・・・・・)」
(5) ANY/ALL演算子による複数値との比較

3、検索結果の加工
(1) DISTINCT 検索結果から重複行を除外
(2) ORDER BY 検索結果の順序を並び替える
  SELECT 列名 FROM テーブル名
         ORDER BY 列名 並び順(ASC/DESC)
(3) LIMIT 先頭から数行だけ取得(出金額の高い順に3件を取得する)
     SELECT 費目, 出金額 FROM 家計簿
         ORDER BY 出金額 DESC LIMIT 3
(4) 集合演算子(UNION(和集合)/EXCEPT(差集合)/INTERSECT(積集合))

4、式と関数
(1) CASE演算子ー値を変換する
CASE演算子は、列の値や条件式を評価し、結果に応じて好きな値に変換させる
(構文)
CASE 評価する列や式 WHEN 値1 THEN 値1の時の返す値
                                       (WHEN 値2 THEN 値2の時の返す値)
                                       (ELSE デフォルト値)
END
(例)
SELECT  費目,出金額,
CASE 費目 WHEN '居住費' THEN '固定費'
     WHEN '水道光熱費'  THEN '固定費'
      ELSE '変動費'
  END AS 出費の分類
 FROM 家計簿
 WHERE 出金額 > 0


(構文)
CASE  WHEN 条件1 THEN 条件1の時の返す値
                                       (WHEN 条件2 THEN 条件2の時の返す値)
                                       (ELSE デフォルト値)
END
(例)
SELECT  費目,入金額,
CASE WHEN 入金額 < 5000 THEN 'お小遣い'
     WHEN 入金額 < 10000 THEN '一般収入'
     WHEN 入金額 < 30000 THEN '給料出たー!'
      ELSE '想定外の収入です!'
  END AS 収入の分類
 FROM 家計簿
 WHERE 入金額 > 0



(2) LENGTH(長さ取得)/TRIM(空白除去)/REPLACE(置換)/SUBSTRING(文字列一部抽出)
     ROUND(指定桁四捨五入)/TRUNC(指定桁切り捨て)/POWER(べき乗計算)
     CURRENT_DATE(現在の日付/CURRENT_TIME(現在の時刻)
     CAST(データ変換)
    COALESCE(最初に登場するNULLでない値を返す)
※COALESCEは「コウアレス」とよむそうです