1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

SQL入門2

1
Posted at

SQL関数

文字関数

:star:LOWER( 文字列 )
引数のアルファベット文字列を、すべて小文字に変換

:star: UPPER( 文字列 )
引数のアルファベット文字列を、すべて大文字に変換

:star: INITCAP( 文字列 )
引数のアルファベット文字列を、各単語の先頭文字を大文字に変換し、残りの文字を小文字に変換

SELECT sno, sname, INITCAP( area ), LOWER( city )
FROM student
WHERE area = UPPER( 'tokyo' )
ORDER BY sno;

       SNO SNAME                INITCAP(AREA)        LOWER(CITY)
---------- -------------------- -------------------- --------------------
         1 Y_YAMADA             Tokyo                shinjuku
         4 H_SATO               Tokyo                shinjuku
         5 N_TAKADA             Tokyo                shinagawa
         8 A_SHIMADA            Tokyo                shinagawa
        10 M_NARITA             Tokyo                suginami
        11 H_TAKAHASHI          Tokyo                setagaya
        13 Y_SUZUKI             Tokyo                saitama
```

:star:CONCAT( 文字列 1, 文字列 2 )
文字列 1 と文字列 2 を 1 つに結合

:star:SUBSTR( 文字列, 数値 1, 数値 2 )
文字列の、数値 1 文字目から、数値 2 の文字数分抜きだす

:star:LENGTH( 文字列 )
文字列の文字数を戻す

:star:INSTR( 文字列 1, 文字列 2 )
文字列 1 のなかで、文字列 2 の位置を調べ、何文字目に現れるか

:star: LPAD( 文字列, 数値, 'パディング文字' )
数値で指定した桁数になるまで、列の値の左側に、指定したパディング文字 を埋め込む

:star: RPAD( 文字列, 数値, 'パディング文字' )
数値で指定した桁数になるまで、列の値の右側に、指定したパディング文字 を埋め込む

:star:TRIM( LEADING | TRAILING | BOTH 削除文字列 FROM 文字列 
文字列の先頭、最後、またはその両方から削除文字列を切り捨てる

:star:REPLACE( 文字列, 検索文字列, 置換文字列 )
文字列から検索文字列を探し、置換文字列に置き換える

:star:TRIM( LEADING | TRAILING | BOTH 削除文字列 FROM 文字列 ) 
:star: REPLACE( 文字列, 検索文字列, 置換文字列 )
TRIM 関数は、文字列の先頭、最後、またはその両方から削除文字列を切り捨てる
REPLACE関数は、文字列から検索文字列を探し、置換文字列に置き換える

 ```
SELECT sno,area,
TRIM( LEADING 'T' FROM area ) AS TrimTest,
REPLACE( area, 'TOKYO', 'SAITAMA' ) AS ReplaceTest
FROM student
ORDER BY sno;

STUDENT 表から、SNO 列、AREA 列、AREA 列の先頭から T を削除したもの、AREA 列の TOKYO を SAITAMA に置き換えたもの
 ```
### 数値関数
:star: CEIL ( 数値 )
引数の数値以上の最も小さい整数

:star: FLOOR ( 数値 )
引数の数値以下の最も大きい整数

:star: POWER ( 数値 1, 数値 2 )
引数の「数値 1」を「数値 2」だけ乗じた値(べき乗)を戻す

:star:SQRT ( 数値 )
引数の数値の平方根

:star:CEIL ( 数値 )、FLOOR ( 数値 )、POWER ( 数値 1, 数値 2 )、SQRT ( 数値 )
それぞれの最も小さい整数、最も大きい整数、乗じた値、平方根

:star:ROUND( 数値 1, 数値 2 )
小数点以下数値 2 の桁まで四捨五入

:star: TRUNC( 数値 1, 数値 2 )
小数点以下数値 2 の桁まで切り捨てた値

:star: MOD( 数値 1, 数値 2 )
数値 1 を 数値 2 で除算した余り

###	日付関数
:star: SYSDATE
データベース 上の現在の日付、および時刻

:star: MONTHS_BETWEEN( 日付 1, 日付 2 )
日付 1 から日付 2 までの月数

:star: ADD_MONTHS( 日付, 数値 )
指定した日付に数値の月数を加算

:star: NEXT_DAY(日付、'文字列')
指定した日付の次に来る指定「曜日」の日付

:star: LAST_DAY ( 日付 )
日付で指定した月の末日

:star: ROUND ( 日付, '表示書式' )
指定した日付を、表示書式で指定した単位に四捨五入

:star: TRUNC ( 日付, '表示書式' )
指定した日付を、表示書式で指定した単位に切り捨てた日付

### 変換関数( 明示的なデータ型変換 )
:star: TO_CHAR ( 数値/日付, 表示書式, nls パラメータ )
数値型、および日付型のデータを、指定した表示書式にしたがって、可変長 の文字型データに変換

:star: TO_NUMBER( 文字, 表示書式, nls パラメータ )
数値を表す文字型のデータを、指定した表示書式にしたがって数値型データに変換

:star: TO_DATE( 文字, 表示書式, nls パラメータ )
日付を表す文字型のデータを、指定した表示書式にしたがって日付型データに変換

### 汎用関数
:star: NVL( 式, 値 )
式の値が NULL 値の場合には、値を戻す

:star: NVL2( 式, 値 1, 値 2 )
式の値が NULL 値以外の場合には、値 1 を戻す

:star: NULLIF( 式 1, 式 2 )
2 つの式の値を比較します。2 つの値が等しい場合には NULL 値を戻し、等しくない場合には式 1 の値を戻す

:star: COALESCE( 式 1, 式 2, ・・・, 式 n )
式リスト のなかの、最初の NULL 値ではない式

:star: GREATEST( 値 1, 値 2, ・・・, 値 n )
値リスト のなかでもっとも大きい値

:star: LEAST( 値 1, 値 2, ・・・, 値 n )
値リストの中でもっとも小さい値

:star: USER
ログイン しているユーザー の名

### 汎用関数
:star: DECODE( 式, 条件 1, 値 1, ・・・, 条件 n, 値 n, デフォルト値 )
式が条件と同じ場合には、対応する値を戻す

:star: CASE 式

```
CASE 式 WHEN 条件 1 THEN 値 1
        WHEN 条件 2 THEN 値 2
        WHEN 条件 n THEN 値 n
        ELSE デフォルト値
END
```
```
eg)
SELECT sno, sname, area, score, CASE area WHEN 'HOKKAIDO' THEN score + 5 WHEN 'TOKYO' THEN score + 3 ELSE score
                                END AS adj_score
FROM student
ORDER BY sno;
```

### グループ関数
:star: AVG( 列名 )
NULL 値を除いた平均値

:star: COUNT( 列名 )
NULL 値を除いた行数

:star: MAX( 列名 )
NULL 値を除いた最大値

:star: MIN( 列名 )
NULL 値を除いた最小値

:star: STDDEV( 列名 )
NULL 値を除いた標準偏差

:star: SUM( 列名 )
NULL 値を除いた合計

:star: VARIANCE( 列名 )
NULL 値を除いた偏差 

```
eg)STUDENT 表から、BIRTH 列の行数、最高値、および最小値を表示

SELECT COUNT( birth ), TO_CHAR( MAX( birth ), 'YYYY-MM-DD' ) MAX_BIRTH, TO_CHAR( MIN( birth ), 'YYYY-MM-DD' ) MIN_BIRTH
FROM student;
```

### データグループの作成
:star: GROUP BY
・グループに分割する前に行を制限するには、WHERE 句を使用

```
SELECT 列名, グループ関数名( 列名 )
FROM 表名
WHERE 条件式
GROUP BY 列名
ORDER BY 列名;
```

:star: HAVING
条件を指定してグループの結果を制限

SELECT 列名, 列名, グループ関数( 列名 )
FROM 表名
WHERE 条件式
GROUP BY 列名
HAVING 条件式
ORDER BY 列名;


## 副問合せ
### 単一行副問合せ

SELECT sno, sname, area
FROM student
WHERE area = ( SELECT area
FROM student
WHERE sno = 1 )
ORDER BY sno;


### 複数行副問合せ

SELECT sno, sname, score, class
FROM student
WHERE score IN ( SELECT MIN( score )
FROM student
GROUP BY class )
ORDER BY sno;


SELECT sno, sname, area, score
FROM student
WHERE score < ANY ( SELECT score
FROM student
WHERE area = 'TOKYO' )
ORDER BY sno;




### インライン・ビュー
FROM 句のなかの表別名 をつけた副問合せ のこと

STUDENT 表から、SNO 列、SNAME 列、SCORE 列、および CLASS 列を検索。また、STUDENT 表から、CLASS 列、および CLASS 列ごとの SCORE 列の最高値をふくむインライン・ビューである B を作成し、B から、CLASS 列ごとの SCORE 列の最高値を表示

SELECT a.sno, a.sname, a.score, a.class, b.maxscore
FROM student a, ( SELECT class, MAX( score ) maxscore
FROM student
GROUP BY class ) b
WHERE a.class = b.class
ORDER BY a.sno;


### トップ N 分析
トップ N 分析は、条件に基づいて、表 から上位 n 個、または下位 n 個の行 を検索する必要がある場合に使用

SELECT ROWNUM, 列名, 列名
FROM ( SELECT 列名, 列名 FROM 表名 ORDER BY 列名 )
WHERE ROWNUM <= 数値;




1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?