現場での実践SQL(4) | IT SKILL MAP

現場での実践SQL(4)

 今回は、SELECT文での表示についてまとめます。
 (2)、(3)で抽出についてまとめましたが、今回の表示は、抽出したデータに対し、表示したい形式に加工しているだけの作業と言えます。そのため、抽出の時のように、プライマリーキー及びインデックス項目でないと抽出条件にしてはいけない等、神経質になる必要はありません。既にレコードが絞られている状態なので、レスポンスを気にせず加工してOKです。例え抽出結果が100万件あったとしても、またどれほど複雑な関数を入れたとしても、抽出と違いレスポンスに影響するほどにはなりません。

目次
1- 1.CASE文
1- 2.DISTINCT文
1- 3.文字列操作関数
1- 4.数値操作関数

SELECT文での表示

 上でも書きましたが、ここではSELECT文での表示についてまとめます。この時点でデータベースから必要なデータを抽出するというSQLでの一番重要な役割は終わっているのです。ここからはSQLでもできますし、アプリケーションのプログラム側でもできます。どちらで実施する方が効率的か、プログラムの視認性が高まるか、検討した上で必要であればSQL側で表示加工するようにして下さい。


 一口メモ:selectは表示だけでも利用できます。「select 'Hello';」とすれば、「Hello」と結果が返ります。
 phpやcmdのechoコマンドと同じです。


1-1.CASE文

 マスタ化するまでもないような、ENUMレベルの分岐表示に良く使用します。例えば性別(男/女)、雇用形態(正社員/契約社員/パート)などです。


 ~ 例1 ~ 

 テーブルAを全件表示する際に、KIND項目を「男」又は「女」に置き換えて表示します。


 CASE文 例1

select 
A.KEY,
case when A.KIND='0' then '男' 
	when A.KIND='1' then '女'
end as KIND
from A;

 ~ 結果 ~ 

 CASE文、及び関数を使用すると項目名がなくなりますので、AS句を使用して項目名を新たに付けます。


 ~ 例2 ~ 

 テーブルAを全件表示する際に、KIND項目とTYPE項目の2項目をもとに、NAME項目を作成して表示します。


 CASE文 例2

select 
A.KEY,
case when A.KIND='0' then -- 男
		case when A.TYPE='1' then '男性正規'
			else '男性非正規'
		end
	when A.KIND='1' then -- 女
		case when A.TYPE='1' then '女性正規'
			else '女性非正規'
		end
end as NAME
from A;

 ~ 結果 ~ 


1-2.DISTINCT文

 DISTINCTは重複レコードを省く際に利用します。働きとしてはUNIONやGROUP BYと似ていますが根本的にそれらとDISTINCTは違います。DISTINCTは表示結果に対して重複をなくすものです。



 DISTINCT文 例 

select distinct A.KIND
from A;

 ~ 結果 ~ 


1-3.文字列操作関数

 良く使う文字列関数をまとめます。

文字列関数 意味 使用例 結果
concat 文字列を結合する select concat('103','-','0001') 103-0001
trim 左右スペース除去 select trim('_HELLO_'); HELLO
特定文字のtrim - select trim( 'php' from 'phpphpsqlphp' ); sql
ltrim 左スペース除去 select trim('_HELLO_'); HELLO_
rtrim 右スペース除去 select trim('_HELLO_'); _HELLO
lpad 左指定文字でパディング 0埋め等 select lpad('10',5,'0'); 00010
rpad 右指定文字でパディング select rpad('10',5,'X'); 10XXX
left 左から文字抽出 select left('phpsql',3); php
right 右から文字抽出 select right('phpsql',3); sql
mid 文字の部分抽出 select mid('phpsqlphp',4,'3'); sql
instr 検索文字の出現場所
midと組み合せる
select instr('phpsqlphp','sql'); 4
replace 文字の置換 select replace('phpsql','php','sql'); sqlsql

 使用に注意が必要な関数(表には、記載していません):length、char_length 文字数をカウントする関数です。英数字は問題ありませんが、日本語のUTF-8を利用している際は符号化のバイト数の影響で日本語1文字で3カウント、4カウントされてしまいますので注意が必要です。

1-4.数値操作関数

数値関数 意味 使用例 結果
ceil 引数以上で最小の整数値 select ceil(1.01); 2
floor 引数以下で最大の整数値 select floor(1.01); 1
round 引数の四捨五入
(第2引数は小数点以下の桁数)
select round(1.5,0); 2
truncate 引数の切り捨て
(第2引数は小数点以下の桁数)
select truncate(1.5,0); 1
format 数値に3桁区切りのカンマを付ける select format(12345,0); 12,345


おすすめの関連記事

現場での実践SQL(3)
現場での実践的なSQL知識をまとめています。(3)では複数テーブルからの基本的な抽出についてまとめています。
現場での実践SQL(5)
現場での実践的なSQL知識をまとめています。(5)ではグループ化による集計処理についてまとめています。