20040229

第3章 単一行関数およびグループ関数

3-1 単一行関数
■単一行関数を使用し、問い合わせ対象の表やビューの各行に対して、単一の結果行を戻します。

■一般関数
関数 説明
NVL(expr,val) exprがNULLの場合valを戻す
NVL2(expr,val1,val2) exprがNULL以外の場合val1を、NULLの場合val2を戻す
NULLIF(expr1,expr2) expr1とexpr2が等しい場合はNULLを、等しくない場合はexpr1を戻す
COALESCE(expr1,...exprn) exprの中の最初のNULLでない値を戻す
UID 現在のユーザーID(ログインしているユーザを一意に識別する値)
USER 現在のユーザー名

■数値関数:文字列関数は文字を受け取り、文字や数値を戻します。
関数 説明
CEIL(n) n以上の最も小さい整数を戻す
FLOOR(n) n以下の最も大きい整数を戻す
MOD(m,n) mをnで除した余りを戻す
POWER(m,n) mをn乗した値を戻す
SQRT(n) nの平方根を戻す
ROUND(m,n) mを少数点以下n桁で四捨五入する
TRUNC(m,n) mを少数点以下n桁で切り捨てる

■文字列関数:文字列関数は文字を受け取り、文字や数値を戻します。
関数 説明
LENGTH(char) 文字列charの長さを戻す
LENGTHB(char) 文字列charの長さをバイト数で戻す
INSTR(char1,char2,n,m) char1のn番目の文字からm文字の長さの文字列を抜き出して戻す
SUBSTR(char,n,m) charのn番目の文字からm文字の長さの文字列を分を抜き出して戻す
INITCAP(char) 各単語の先頭の文字を大文字に、残りを小文字に変換して戻す
UPPER(char) charを全て大文字に変換する
LOWER(char) charを全て小文字に変換する
TRIM([LEADING|TARILIMG|BOTH][char1 FROM]char2) char1をchar2から切り捨てて戻す
LTRIM [char] charの左側の空白を取り除く
RTRIM [char] charの右側の空白を取り除く
REPLACE(char1,char2,char3) char1からchar2を検索してchar3に置換して戻す
LPAD 文字値の左側にn文字の位置まで指定された文字列を埋め込む
RPAD 文字値の右側にn文字の位置まで指定された文字列を埋め込む
CONCAT 文字列を連結する

■日付関数:日付関数はOracleの日付を操作します。日付関数はDATEデータ型を戻します。
  (日付データでは算術演算子(加算、減算)を使った演算も可能です。)
関数 説明
ADD_MONTHS(d,n) 日付dにnヶ月を加算した値を戻す
LAST_DAY(d) 指定した月の最終日を戻す
NEXT_DAY(d,char) 次のchar曜日を迎える日付を戻す
MONTHS_BETWEEN(d1,d2) 日付d1とd2の日付間の月数を戻す
SYSDATE 現在の日付を戻す
ROUND(d,fmt) fmtで指定した単位に日付dを四捨五入する
TRUNC(d,fmt) fmtで指定した単位に日付dを切り捨てる

■変換関数:変換関数は、値のデータ型を別のデータ型に変換します。
関数 説明
TO_NUMBER(char,fmt,nlsparams) 書式fmtで指定したcharをNUMBER型に変換して戻す
TO_CHAR(n,fmt,nlsparams) 書式fmtで指定したnを文字型に変換して戻す
TO_CHAR(d,fmt,nlsparams) 書式fmtで指定したdを文字型に変換して戻す
TO_DATE(char,fmt,nlsparams) 書式fmtで指定したcharを日付型に変換して戻す

■分岐関数:条件に一致した値を戻す。
関数 説明
SELECT CASE expr  
 WHEN val1 THEN rtn1
 WHEN val1 THEN rtn2
 ELSE  rtnn
END
exprの値がval1の場合rtn1を、valnの場合rtnnを戻す
DECODE(expr,val1,rtn1,val2,rtn2, ...valn,rtnn) 同上

■その他関数
関数 説明
GREATEST(expr,expr) exprの中の最大値を戻す
LEAST(expr,expr) exprの中の最小値を戻す


3-2 書式モデル
■日付や数値を文字列にするTO_CHAR関数や、文字列を日付に変換するTO_DATE関数では、書式を指定することができる

■日付書式:TO_CHAR(列または値,‘書式’)
書式 説明
YYYY 4桁の年(例 2000)
MM 2桁で表示した月(例 01〜12)
MONTH 月の完全な名前(例 1月〜12月 または JANUARYからDECEMBER)
MON 月の略称(JANからDEC)
DD 各月の日(例 01〜31)
DAY 曜日の完全な名前(例 日曜日〜土曜日)
DY 曜日の略称(例 日〜土)
D 周における曜日(例 1〜7)
HH または HH12 12時間制表記の時間
HH24 24時間制表記の時間
MI
SS
RR 指定した下2桁の年と現在の年の下2桁により戻される世紀を変える
  指定された年の下2桁
00-49 50-99
現在の年の下2桁 00-49 戻される年の上2桁は今の100年 戻される年の上2桁は1つ前の100年
50-99 戻される年の上2桁は1つ先の100年 戻される年の上2桁は今の100年

■数値書式:TO_CHAR(列または値,‘書式’)
書式 説明
9:999 9の数が有効桁数を表す
0:099 先行ZEROを戻す
$:$999 $記号を値の前に戻す
L:L999 通貨記号を値の前に戻す
,:999,999 指定した位置にカンマを戻す
.:999.99 指定した位置にピリオドを戻す
G:999G999 指定した位置にグループ区切り文字を戻す
D:99D99 指定した位置にピリオドを戻す


3-3 グループ関数
■グループ関数を使用し、行のグループに基づく結果を戻します。
  ・グループ関数には、DISTINCTやALLのオプションを指定することができる。
関数 説明
AVG(n) nの平均値を戻す SELECT AVG(SALARY) 
FROM EMPLOYEES;
COUNT(expr) exprがNULLでない行数を戻す SELECT COUNT(DISTINCT JOB_ID) 
FROM EMPLOYEES;
MAX(expr) exprの最大値を戻す SELECT MAX(SALARY) 
FROM EMPLOYEES;
MIN(expr) exprの最小値を戻す SELECT MIN(SALARY) 
FROM EMPLOYEES;
SUM(n) nの合計値を戻す SELECT SUM(SALARY) 
FROM EMPLOYEES;

■GROUP BY句の基本構文
SELECT 列名リスト,グループ関数
   FROM 表名リスト
    WHERE 条件式
     GROUP BY グループ化する基準
  ・GROUP BY句を使用して表内の行をグループ化することができます。
  ・SELECT句内に列名を指定した場合はGROUP BY句に同じ列名を指定しなければなりませんが、逆にGROUP BY句に指定した列名はSELECT句に必ずしも指定する必要はありません。
  ・WHERE句にグループ関数は使用できません。グループ関数による条件指定をする場合にはHAVING句を使用します。
  ・GROUP BY句は必ずWHERE句の後に指定します。

■HAVING句の基本構文
SELECT 列名リスト,グループ関数
   FROM 表名リスト
    WHERE 条件式
     GROUP BY グループ化する基準
     HAVING グループ化する条件
  ・問い合わせで戻すグループを制限する場合にはHAVING句を使用します。HAVING句の条件を満たすグループのみ戻されます。
  ・HAVING句、GROUP BY句はWHERE句の後に、ORDER句は最後に配置します。また、HAVING句はGROUP BY句の前でも後でも配置できます。
  ・評価の順番は以下の通りになります。
    WHERE句 → GROUP BY句 → HAVING句