MySQL(その10 order by,算術演算子,concat)

その9.5から続きます。

データの並べ替える方法(order by)

構文:order by 列名や式 並び順

並び順について

asc・・・昇順(ascending)※デフォルト並び順を指定しない場合昇順。

desc・・・降順(descending)

例1:商品一覧を価格が低い順に並べて作成したい!

select *from products order by price asc;

ascはなくても良い。取得するレコードの並び順が重要な場合はorder byを使って明示的に並び順を指定すること。

例2:商品一覧を価格が高い順に並べて作成したい!

select *from products order by price desc;

複数の並び替え条件を指定する。

例3:商品一覧を価格が高い順に並べて作成して
価格が同じ時は登録順(id)で並び替えたい!

※補足(日本語の商品名並び替えについて)

商品名で並び替えたいとなった時に アルファベットの商品名であれば
アルファベット順に並び変わる。

日本語全角文字については文字コード順になるので
期待通りに並び替えられないため工夫が必要。
代替案としては読み仮名を入れる列を新規に作って それを使って並び替えるといった方法が考えられる。

例:ER図を参考にして以下を調べたい

1:ユーザー一覧を生年月日が古い順(昇順)に並べたい!
2:生年月日が一緒の場合は都道府県 ID 順(昇順)に 並べたい。

答え)

1:select * from users order by birthday
2:select * from users order by birthday asc, prefecture_id asc;
別解:select * from users order by birthday,prefecture_id;

いろいろな算術演算(;の右に計算結果を示す)

select 10 + 3; 13
select 10 – 3; 7
select 10 * 3; 30
select 10 / 3; 3.33333
select 10 % 3; 1

nullを含む演算
select 10 + null; null
select 10 – null; null
select 10 * null; null
select 10 / null; null
select 10 % null; null

絶対値の取得
select abs(10); 10
select abs(-10); 10
select abs(0); 0

四捨五入(round関数)の計算

例:商品価格一覧を作成するときに税込価格を出力したい!

(四捨五入したいので1.08で計算。また少数点第1位で四捨五入)

補足:少数第何位か確認
select round(10.555, 0); 11  第一位
select round(10.555, 1); 10,6 第二位
select round(10.555, 2); 10,56 第三位

文字列の演算(concat)

例:山田 太郎さん というように苗字+ +名前+さんのフォーマットで出力したい!

select concat(last_name,’ ‘,first_name,’さん’)from users;

応用)メルマガ送信用のリストを作成したい!

補足

・出力項目は宛名「名字+さん」

・メールアドレス例としては中村さん,nakamura@example . com

・女性ユーザーだけに送信したい

答え)

select concat(last_name,'さん'),email from users where gender = 2


その11に続きます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です