网络编程
位置:首页>> 网络编程>> 数据库>> 查询数据表中的记录(SELECT)(3)

查询数据表中的记录(SELECT)(3)

  发布时间:2009-02-27 16:06:00 

标签:查询,数据库,表,select

+----------+------------+

| name     | birth      |

+----------+------------+

| Buffy    | 1989-05-13 |

| Fang     | 1990-08-27 |

| Bowser   | 1990-08-31 |

| Fluffy   | 1993-02-04 |

| Claws    | 1994-03-17 |

| Slim     | 1996-04-29 |

| Whistler | 1997-12-09 |

| Chirpy   | 1998-09-11 |

| Puffball | 1999-03-30 |

+----------+------------+

为了以逆序排序,增加DESC(下降 )关键字到你正在排序的列名上:

mysql> SELECT name, birth FROM pet ORDER BY birth DESC;

+----------+------------+

| name     | birth      |

+----------+------------+

| Puffball | 1999-03-30 |

| Chirpy   | 1998-09-11 |

| Whistler | 1997-12-09 |

| Slim     | 1996-04-29 |

| Claws    | 1994-03-17 |

| Fluffy   | 1993-02-04 |

| Bowser   | 1990-08-31 |

| Fang     | 1990-08-27 |

| Buffy    | 1989-05-13 |

+----------+------------+

你能在多个列上排序。例如,按动物的种类排序,然后按生日,首先是动物种类中最年轻的动物,使用下列查询:

mysql> SELECT name, species, birth FROM pet ORDER BY species, birth DESC;

+----------+---------+------------+

| name     | species | birth      |

+----------+---------+------------+

| Chirpy   | bird    | 1998-09-11 |

| Whistler | bird    | 1997-12-09 |

| Claws    | cat     | 1994-03-17 |

| Fluffy   | cat     | 1993-02-04 |

| Bowser   | dog     | 1990-08-31 |

| Fang     | dog     | 1990-08-27 |

| Buffy    | dog     | 1989-05-13 |

| Puffball | hamster | 1999-03-30 |

| Slim     | snake   | 1996-04-29 |

+----------+---------+------------+

注意DESC关键词仅适用于紧跟在它之前的列名字(birth);species值仍然以升序被排序。注意,输出首先按照species排序,然后具有相同species的宠物再按照birth降序排列。

查询分组与行计数

GROUP BY 从句根据所给的列名返回分组的查询结果,可用于查询具有相同值的列。其语法为:

GROUP BY col_name,….

你可以为多个列分组。

例如:

mysql>SELECT * FROM pet GROUP BY species;


+----------+--------+---------+------+------------+-------+

| name     | owner  | species | sex  | birth      | death |

+----------+--------+---------+------+------------+-------+

| Chirpy   | Gwen   | bird    | f    | 1998-09-11 | NULL  |

| Fluffy   | Harold | cat     | f    | 1993-02-04 | NULL  |

| Buffy    | Harold | dog     | f    | 1989-05-13 | NULL  |

| Puffball | Diane  | hamster | f    | 1999-03-30 | NULL  |

| Slim     | Benny  | snake   | m    | 1996-04-29 | NULL  |

+----------+--------+---------+------+------------+-------+

由以上结果可以看出:

查询显示结果时,被分组的列如果有重复的值,只返回靠前的记录,并且返回的记录集是排序的。这并不是一个很好的结果。仅仅使用GROUP BY从句并没有什么意义,该从句的真正作用在于与各种组合函数配合,用于行计数。

1、COUNT()函数计数非NULL结果的数目。

你可以这样计算表中记录行的数目:

mysql> select count(*) from pet;

+----------+

| count(*) |

+----------+

|        9 |

+----------+

计算sex为非空的记录数目:

mysql> select count(sex) from pet;

+------------+

| count(sex) |

+------------+

|          8 |

+------------+

现在配合GROUP BY 从句使用。

例如:要知道每个主人有多少宠物

mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;

+--------+----------+

| owner  | COUNT(*) |

+--------+----------+

| Benny  |        2 |

| Diane  |        2 |

| Gwen   |        3 |

| Harold |        2 |

+--------+----------+

又如,每种宠物的个数:

mysql> SELECT species,count(*) FROM pet GROUP BY species;

+---------+----------+

| species | count(*) |

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com