データの並べ替える方法(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に続きます。