はじめに
この記事はPHPをやってみたいので、MySQLもやってみる(その3)の続きです。
備忘録なので、足りない分や、もっとこうしたらよかったとかは、後から追加修正していきます。
テーブルのレコードを並び替える
下記のようなテーブルがあるとします。
mysql> select * from users;
+-------+------+---------+
| name | age | address |
+-------+------+---------+
| taro | 13 | tokyo |
| jiro | 10 | osaka |
| sato | 18 | tokyo |
| kato | 25 | osaka |
| ando | 60 | miyagi |
| ohara | 70 | tokyo |
+-------+------+---------+
これを、ageの値で並び変えてみます。
並び替えにはorder by {フィールド名} {asc(昇順)|desc(降順)}
を使用します。
mysql> select * from users order by age asc;
+-------+------+---------+
| name | age | address |
+-------+------+---------+
| jiro | 10 | osaka |
| taro | 13 | tokyo |
| sato | 18 | tokyo |
| kato | 25 | osaka |
| ando | 60 | miyagi |
| ohara | 70 | tokyo |
+-------+------+---------+
ageが小さい順に並び替わりました。
大きい順に並び替えるにはdesc
を使用します。
mysql> select * from users order by age desc;
+-------+------+---------+
| name | age | address |
+-------+------+---------+
| ohara | 70 | tokyo |
| ando | 60 | miyagi |
| kato | 25 | osaka |
| sato | 18 | tokyo |
| taro | 13 | tokyo |
| jiro | 10 | osaka |
+-------+------+---------+
name(文字列)で並び替えると下記のようになります。
mysql> select * from users order by name asc;
+-------+------+---------+
| name | age | address |
+-------+------+---------+
| ando | 60 | miyagi |
| jiro | 10 | osaka |
| kato | 25 | osaka |
| ohara | 70 | tokyo |
| sato | 18 | tokyo |
| taro | 13 | tokyo |
+-------+------+---------+
取得件数を制限する
データの取得件数を指定してみます。
件数を指定するにはlimit {抽出する件数}
を使用します。
mysql> select * from users limit 4;
+------+------+---------+
| name | age | address |
+------+------+---------+
| taro | 13 | tokyo |
| jiro | 10 | osaka |
| sato | 18 | tokyo |
| kato | 25 | osaka |
+------+------+---------+
開始位置を指定する
取得開始位置を指定するにはlimit {取得開始位置},{抽出する件数}
を使用します。
下記の例では、データの4件目から2件取得します。
※開始位置は0スタート。
mysql> select * from users limit 4,2;
+-------+------+---------+
| name | age | address |
+-------+------+---------+
| ando | 60 | miyagi |
| ohara | 70 | tokyo |
+-------+------+---------+
例えばageの上位3件を取得するには下記の様になります。
mysql> select * from users order by age desc limit 3;
+-------+------+---------+
| name | age | address |
+-------+------+---------+
| ohara | 70 | tokyo |
| ando | 60 | miyagi |
| kato | 25 | osaka |
+-------+------+---------+
レコードの総件数を取得する
レコードの総件数を取得する場合は、count
を使用します。
mysql> select count(*) from users;
+----------+
| count(*) |
+----------+
| 6 |
+----------+
フィールドの重複行を除外した値を取得
フィールドにから、重複した値を除いてユニークな値だけ取得してみる。
抽出するにはdistinct {フィールド名}
を使用する。
mysql> select distinct address from users;
+---------+
| address |
+---------+
| tokyo |
| osaka |
| miyagi |
+---------+
フィールドの最大値を取得
フィールドの最大値を取得する場合はmax({レコード名})
を使用する。
mysql> select max(age) from users;
+----------+
| max(age) |
+----------+
| 70 |
+----------+
フィールドの平均値を取得
フィールドの平均を取得する場合はavg({レコード名})
を使用する。
mysql> select avg(age) from users;
+----------+
| avg(age) |
+----------+
| 32.6667 |
+----------+
address毎の平均値を取得
特定のグループ毎に平均値を出したい場合はgroup by {フィールド名}
を使用します。
mysql> select address,avg(age) from users group by address;
+---------+----------+
| address | avg(age) |
+---------+----------+
| miyagi | 60.0000 |
| osaka | 17.5000 |
| tokyo | 33.6667 |
+---------+----------+
フィールドの合計値を取得
フィールドの平均を取得する場合はsum({レコード名})
を使用する。
mysql> select sum(age) from users;
+----------+
| sum(age) |
+----------+
| 196 |
+----------+
終わり
少しずつレコードの取得方法もわかってきました。
簡単なデータなら登録して、取得することができそうです。