Posted at

PHPをやってみたいので、MySQLもやってみる(その4)

More than 3 years have passed since last update.


はじめに

この記事は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 |
+----------+


終わり

少しずつレコードの取得方法もわかってきました。

簡単なデータなら登録して、取得することができそうです。