3-排序检索的数据
使用order by语句排序检索到的数据。
3.1-排序数据
使用SQL语句返回一个数据表的列。
select prod_id
from products;
+---------------------+
| prod_name |
+---------------------+
| 8 inch teddy bear |
| 12 inch teddy bear |
| 18 inch teddy bear |
| Fish bean bag toy |
| Bird bean bag toy |
| Rabbit bean bag toy |
| Raggedy Ann |
| King doll |
| Queen doll |
+---------------------+
9 rows in set (0.00 sec)
并没有固定的排序,如果不指定排序方式,默认检索出的数据是按照数据在表中的数据。
子句,SQL语句是由子句构成的,有些子句是必须的,有些子句是可选的。
一个子句通常由:一个关键字加上所提供的数据组成。
子句的例子有我们在前面看到的SELECT语句的FROM子句。
为了明确排序select检索出的数据,使用order by子句。order by子句取一个或多个列的名字。
select prod_name
from products
order by prod_name;
+---------------------+
| prod_name |
+---------------------+
| 12 inch teddy bear |
| 18 inch teddy bear |
| 8 inch teddy bear |
| Bird bean bag toy |
| Fish bean bag toy |
| King doll |
| Queen doll |
| Rabbit bean bag toy |
| Raggedy Ann |
+---------------------+
9 rows in set (0.00 sec)
使用order by子句时,保证它是最后一条子句,如果不是最后一条子句,可能会报错。
上述子句按照字母顺序从前往后排序。
有时候需要按照多列进行排序。
select prod_id,prod_name,prod_price
from products
order by prod_price, prod_name;
+---------+---------------------+------------+
| prod_id | prod_name | prod_price |
+---------+---------------------+------------+
| BNBG02 | Bird bean bag toy | 3.49 |
| BNBG01 | Fish bean bag toy | 3.49 |
| BNBG03 | Rabbit bean bag toy | 3.49 |
| RGAN01 | Raggedy Ann | 4.99 |
| BR01 | 8 inch teddy bear | 5.99 |
| BR02 | 12 inch teddy bear | 8.99 |
| RYL01 | King doll | 9.49 |
| RYL02 | Queen doll | 9.49 |
| BR03 | 18 inch teddy bear | 11.99 |
+---------+---------------------+------------+
9 rows in set (0.00 sec)
检索出的结果首先按照prod_price排序,如果prod_price相同,就按照prod_name进行排序。
如果price的值都是唯一的,则不会按照name进行排序。
除了使用列名进行排序,还可以使用相对列位置进行排序。
select prod_id,prod_price,prod_name
from products
order by 2,3;
2表示使用第二列进行排序,也就是id,price,name中的第二列进行排序,3表示使用第三列进行排序。
好处是不用重复输入列名,但是坏处是容易搞错要排列的列,修改select语句时,可能忘记更改排列。
3.2-指定排序方向
数据排序默认的排序是A到Z,可以使用order by子句进行降序排序,从Z到A排序。使用关键字desc。
select prod_id,prod_price,prod_name
from products
order by prod_price desc;
+---------+------------+---------------------+
| prod_id | prod_price | prod_name |
+---------+------------+---------------------+
| BR03 | 11.99 | 18 inch teddy bear |
| RYL01 | 9.49 | King doll | | RYL02 | 9.49 | Queen doll |
| BR02 | 8.99 | 12 inch teddy bear |
| BR01 | 5.99 | 8 inch teddy bear |
| RGAN01 | 4.99 | Raggedy Ann |
| BNBG01 | 3.49 | Fish bean bag toy |
| BNBG02 | 3.49 | Bird bean bag toy |
| BNBG03 | 3.49 | Rabbit bean bag toy |
+---------+------------+---------------------+
9 rows in set (0.00 sec)
按照price从高到低进行排序。
3.3-多列排序
select prod_id,prod_price,prod_name
from products
order by prod_price desc,prod_name;
上述语句先对prod_price进行降序排列(价格由高到低),如果遇到价格相同的两行,则按照名称升序排列(从A到Z)。
注意:如果想要在多个列上进行降序排列,必须对每一列指定desc关键字。默认为asc,升序排序。
desc是descending的缩写,这两个关键字都可以使用。与desc相对的是asc,是ascending的缩写。
默认情况下,在字典排序顺序中,A被视为与a相同,这是大多数数据库管理系统的默认做法。
许多DBMS允许数据库管理员在需要时改变这种行为。