FOR SE

文系の学部から新卒でメーカー系のSIerに就職。技術・スキルがないためブログを通して勉強。その後、IT業界の業界知識が活かせる人材業界に就職

このエントリーをはてなブックマークに追加

【SQL入門】単一関数とグループ関数まとめ~汎用編とグループ関数編~

【今回の紹介】


仕事の都合で「oraclesql基礎」を取得することになったのでその学習メモを載せまーす


ちなみにインプットはこの書籍
【オラクル認定資格試験対策書】ORACLE MASTER Bronze[12c SQL基礎](試験番号:1Z0-061)完全詳解+精選問題集(オラクルマスタースタディガイド)
【オラクル認定資格試験対策書】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→一番新しい日付

.hatena-module:nth-of-type(10) { background: transparent; } .hatena-module:nth-of-type(10) .hatena-module-title{ display: none; } .hatena-module:nth-of-type(10) .hatena-module-body { padding: 0; }