3.3.4.4 行排序

你可能已经注意到, 在前面的示例中, 查询的结果记录并没有按照特定的顺序显示. 当以某种有意义的方式对行进行排序时, 通过更容易检查查询输出. 要对结果排序, 使用 ORDER BY 子句.

以下是动物的生日, 按照日期排序:

  1. mysql> SELECT name, birth FROM pet ORDER BY birth;
  2. +----------+------------+
  3. | name | birth |
  4. +----------+------------+
  5. | Buffy | 1989-05-13 |
  6. | Bowser | 1989-08-31 |
  7. | Fang | 1990-08-27 |
  8. | Fluffy | 1993-02-04 |
  9. | Claws | 1994-03-17 |
  10. | Slim | 1996-04-29 |
  11. | Whistler | 1997-12-09 |
  12. | Chirpy | 1998-09-11 |
  13. | Puffball | 1999-03-30 |
  14. +----------+------------+

在字符串类型类上, 排序与其它所有比较操作一样, 通常以不区分大小写的方式执行. 这意味着除了其大小写之外, 其余相同列的顺序是未定义的. 你可以强制使用 BINARY 对列进行区分大小写, 像是: ORDER BY BINARY col_name.

默认的排序顺序是升序, 首先是最小的值, 若要按照相反的顺序(降序)排序, 请将 DESC 关键字添加到正在排序的列的名称中:

  1. mysql> SELECT name, birth FROM pet ORDER BY birth DESC;
  2. +----------+------------+
  3. | name | birth |
  4. +----------+------------+
  5. | Puffball | 1999-03-30 |
  6. | Chirpy | 1998-09-11 |
  7. | Whistler | 1997-12-09 |
  8. | Slim | 1996-04-29 |
  9. | Claws | 1994-03-17 |
  10. | Fluffy | 1993-02-04 |
  11. | Fang | 1990-08-27 |
  12. | Bowser | 1989-08-31 |
  13. | Buffy | 1989-05-13 |
  14. +----------+------------+

你可以对多个列进行排序, 也可以对不同的列进行不同的排序. 例如, 按照动物的类型进行升序排列, 然后按照动物类型内的出生日期进行降序排列 (最小的动物优先), 使用以下查询:

  1. mysql> SELECT name, species, birth FROM pet
  2. ORDER BY species, birth DESC;
  3. +----------+---------+------------+
  4. | name | species | birth |
  5. +----------+---------+------------+
  6. | Chirpy | bird | 1998-09-11 |
  7. | Whistler | bird | 1997-12-09 |
  8. | Claws | cat | 1994-03-17 |
  9. | Fluffy | cat | 1993-02-04 |
  10. | Fang | dog | 1990-08-27 |
  11. | Bowser | dog | 1989-08-31 |
  12. | Buffy | dog | 1989-05-13 |
  13. | Puffball | hamster | 1999-03-30 |
  14. | Slim | snake | 1996-04-29 |
  15. +----------+---------+------------+

DESC 关键字只适合紧接在它前面的列名 (birth); 它不影响 species 列的排列顺序.