之前只用select语句检索一列,但是没排序
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200629110348142.png)
order by子句
对一列排序
按照产品名字排序(字符串排序,根据ascii码)
select prod_name
from products
order by prod_name;
也可以不用被选列的名字作为order by子句的列,即不根据被显示列本身来排序:
根据价格对产品排序
select prod_name
from products
order by prod_price;
对多个列按照多个标准排序
select prod_id, prod_price, prod_name
from products
order by prod_price, prod_name;
选择了三列数据,先用价格排序,价格相同的再根据名称排序。如果所有行的价格都不一样,则不会用到名称排序。
这里还有一种简单的写法:
select prod_id, prod_price, prod_name
from products
order by 2, 3;
order by2, 3表示先按显示的第2列排序,再按照第三列排序,即先按照价格排序再按照名称排序,因此和上面的代码的效果一样。
这样做的好处是:不用输入列名
坏处是:
- 容易出错,列位置给错了,列很多的时候容易给错,其次如果清单更改了,列位置可能就不一样了
- 如果排序规则列不在select清单中,就根本没法用这个方法。
综上,还是老实写列名吧,保险。
指定排序方向(升序 or 降序,DESC关键字)
默认都是升序
select prod_id, prod_price, prod_name
from products
order by prod_price desc;
如果用多个列排序:
select prod_id, prod_price, prod_name
from products
order by prod_price desc, prod_name;
可以看到价格相同的产品按照产品名称升序排序,说明DESC关键字只作用于它前面的列名。(和distinct不同,distinct作用于后面的所有列名)
即上面代码和下面的等价:
select prod_id, prod_price, prod_name
from products
order by prod_price desc, prod_name asc;
asc升序指定不指定都行,因为是默认的
总结
- order by子句必须是select语句的最后一条子句。
- 可以用多个列来排序
关键字
- desc
- asc
- order by