3.3.4.4 行排序
你可能已经注意到, 在前面的示例中, 查询的结果记录并没有按照特定的顺序显示. 当以某种有意义的方式对行进行排序时, 通过更容易检查查询输出. 要对结果排序, 使用 ORDER BY
子句.
以下是动物的生日, 按照日期排序:
mysql> SELECT name, birth FROM pet ORDER BY birth;
+----------+------------+
| name | birth |
+----------+------------+
| Buffy | 1989-05-13 |
| Bowser | 1989-08-31 |
| Fang | 1990-08-27 |
| Fluffy | 1993-02-04 |
| Claws | 1994-03-17 |
| Slim | 1996-04-29 |
| Whistler | 1997-12-09 |
| Chirpy | 1998-09-11 |
| Puffball | 1999-03-30 |
+----------+------------+
在字符串类型类上, 排序与其它所有比较操作一样, 通常以不区分大小写的方式执行. 这意味着除了其大小写之外, 其余相同列的顺序是未定义的. 你可以强制使用 BINARY
对列进行区分大小写, 像是: ORDER BY BINARY col_name
.
默认的排序顺序是升序, 首先是最小的值, 若要按照相反的顺序(降序)排序, 请将 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 |
| Fang | 1990-08-27 |
| Bowser | 1989-08-31 |
| 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 |
| Fang | dog | 1990-08-27 |
| Bowser | dog | 1989-08-31 |
| Buffy | dog | 1989-05-13 |
| Puffball | hamster | 1999-03-30 |
| Slim | snake | 1996-04-29 |
+----------+---------+------------+
DESC
关键字只适合紧接在它前面的列名 (birth
); 它不影响 species
列的排列顺序.