【SQL入門】単一関数とグループ関数まとめ~汎用編とグループ関数編~
【今回の紹介】
仕事の都合で「oraclesql基礎」を取得することになったのでその学習メモを載せまーす
ちなみにインプットはこの書籍
【オラクル認定資格試験対策書】ORACLE MASTER Bronze[12c SQL基礎](試験番号:1Z0-061)完全詳解+精選問題集(オラクルマスタースタディガイド)
【内容】
SQL関数には多く分けて2つある
①単一関数
対象のレコード分処理結果を返す
②グループ関数
複数のレコードに対し一つの結果を返す。
その中でも今回まとめたのは、単一関数の中の一つである汎用関数とグループ関数について
■汎用関数
汎用関数とは、NULLに関する操作を行う関数のこと
①NVL関数:NULL判定を行い、NULL以外であれば式1、NULLならば式2をかえす
NVL(式1,式2)
※戻り値は式1と同じにする必要あり
②NVL2関数:NULL判定を行い、NULL以外であれば式2、NULLならば式3をかえす
NVL(式1,式2,式3)
※戻り値は式2と同じにする必要あり
③NULLIF関数:式1と式2を判定し、等しい場合はNULLを返し、異なる場合は式1を返す
NULLIF(式1,式2)
④COALESCE関数:引数をひだりからNULLかどうか判定を行い、最初に見つかったNULLでない値を返す
すべての引数がNULLであった場合はNULLを返す
COALESCE(列名a,列名b,列名c)
※すべて引数は同じデータ型にする必要がある
⑤case式
case 列名
when 条件 then 戻り値
when 条件 then 戻り値
when 条件 then 戻り値
else デフォルト値
END
※一致条件なしelseも省略されている場合は、NULLを返す
⑥decode式
decode (列名条件,条件,戻り値,
条件,戻り値,
条件,戻り値)
else デフォルト値
END
※一致条件なしelseも省略されている場合は、NULLを返す
decode関数はoracle固有らしい
■メモ
①いつ型変換・NULL判定を行うべきか
型の変換やNULL判定処理などSQL関数でも、SQL取得後別の言語でも
同様の処理を行うことができるようにみえる。
どのような違いがあって、どう使い分けるべきなのかという疑問があるが
少し調べてもわからないため、今後の課題。
■グループ関数
グループ関数とは指定のグループ単位に処理をかえす関数のこと
集計関数や複数行関数とも呼ばれる。
count(*)以外では、基本的にグループ関数ではNULL値を無視する
※AVG(列名)などを使用する際、NULLを除くと全体の数が変わるため
もし対象列がNULLを許容している場合は、NULLを0に置き換える
必要がある。
例)SUM,AVG,MAXなど
※使用可能な句はselect句,order句,having句
使用不可能な句はwhere句
①count:取り出されたデータ件数を表示。引数によって処理が異なる
count(*):NULLや重複値を含むすべてのデータ件数
count(列名):NULLを除くすべてのデータ件数(重複は含まれる)
count(distinct列名):NULLと重複を除くデータ件数
②MAXとMIN:指定列の最大を取得(MAX)。指定列の最小を取得(MIN)
引数の列の型としては、数値・日付・文字が可能
MAX(列名)
MIN(列名)
③AVG:平均値を取得
AVG(列名)
④SUM:合計を取得
SUM(列名)
■より細かなグループを指定して集計処理を行う(GROUP BY)
①GROUP BYの注意
・列別名は使用できない
・where句order by句の間に記述
・グループ関数を最大に2レベルまでネストできる
・GROUP BY句で指定した列名をselect句に入れなくてもエラーにならないが
反対にGROUP BY句に入っていないものをselect句にいれるとエラーになる
→集計対象以外の列名が同一とは限らないため、表示が難しいため。
■メモ
①MAX・MINが文字型・日付型をどう判断するのか
文字
MIN→辞書順で一番早い文字
MAX→辞書順で一番遅い文字
日付
MIN→一番古い日付
MAX→一番新しい日付