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