はじめに
初心者エンジニアということで優しい目で見てください。
(間違っていたら直したいので教えてください)
今回は参画先現場でSQLを使用する際に、新たな関数や注意点についてになります。
目次
- ●初めて見たやつ
- ・DECODE
- ・列名 IN (1,2,3,...)
- ・ROWNUM
- ・LPAD(列名 ,桁数 ,追加する文字)
- ●勘違い/混同していたこと
- ・CASE文の書き方
- ・SUBSTRの文字指定
- ・= NULLではなく、IS NULL
初めて見たやつ
DECODE
条件分岐に使用する。
現場ではDECODEにしてくださいと一度指示が出たが、処理速度の問題でCASE文に変更になった。
構文/例文
-- 構文
DEOCDE(列名,'比較対象1','返す値1','比較対象2','返す値2',....'その他')
-- 例文
DECCODE(sample.color,'red','赤','blue','青','緑')
-- sampleテーブルのcolor列が、「red」なら「赤」、「blue」なら「青」、その他なら「緑」を返す。
列名 IN (1,2,3,...)
条件を絞るときに使う。
特定の列で多くの値を指定する際に楽。
例文
SELECT * FROM sample WHERE key_no IN ('1','2','3');
-- sampleテーブルのkey_no列が、「1」「2」「3」のレコードを取得する。
ROWNUM
勝手にレコードに採番してくれてるやつ
単体テストの際、データが数千レコードあったが100レコードの確認でよかったので使った。
例文
SELECT * FROM sample WHERE ROWNUM <= 100;
-- sampleテーブルのレコードを100行取得する。
order by で並び替えてから採番させたい場合サブクエリで並び替えたレコードを取得してからROWNUMで絞り込むと指定した順番通りで出力される
例文
SELECT * FROM (SELECT * FROM sample ORDER BY key_no;) WHERE ROWNUM <= 100;
-- sampleテーブルのレコードをkey_noの順番で100行取得する。
LPAD(列名 ,桁数 ,追加する文字)
左側に指定した文字を指定した桁数追加する。
レコードによって桁が違っているものをそろえるのに使った。
例文
SELECT LPAD(branch_no,4,0) FROM sample;
-- sampleテーブルのbranch_no列が、4桁になるように左側に「0」を追加してbranch_no列を取得する。
勘違い/混同していたこと
CASE文の書き方
間違えではなかったけど、めんどくさい書き方になっていた。
例文
-- 自分
CASE
WHEN sample.color = 'red' THEN '赤'
WHEN sample.color = 'blue' THEN '青'
ELSE '緑'
END;
-- 簡単に
CASE sample.color
WHEN 'red' THEN '赤'
WHEN 'blue' THEN '青'
ELSE '緑'
END;
SUBSTRの文字指定
全体の文字数目~全体の文字数目という書き方で間違えてしまっていた
構文/例文
-- 構文
SUBSTR('文字列','全体の何文字目から','何文字目まで切り抜くか')
-- defを切り抜きたい場合
-- 誤
SUBSTR('abcdef','4','6')
-- 正
SUBSTR('abcdef','4','3')
= NULLではなく、IS NULL
普通に勘違いしてた
例文
-- 誤
CASE
WHEN sample.flg = NULL THEN '無'
ELSE '有'
END;
-- 正
CASE
WHEN sample.flg IS NULL THEN '無'
ELSE '有'
END;