5.3 指定排序方向
数据的排序并没有限制为只能按照升序排序(从A到Z)。尽管这是默认的排序序列,ORDER BY子句也可以使用降序排序(从Z到A)。为了进行降序排序,应使用关键字DESC。
下面的例子以价格进行降序排序(价格最高的在第一个):
▼ 输入
▼ 输出
但如果以多列为标准进行排序呢?下面的例子降序排序产品(价格最高的在第一个),后面跟上产品名字:
▼ 输入
▼ 输出
▼ 分析
关键字DESC仅仅作用于直接位于其前面的列名。上面的例子中,DESC作用于prod_price列,而没有作用于prod_name列。因此,prod_price列按照降序排序,而prod_name列(对同一价格)以升序排序。
提示
多列降序排序 如果你想要在多列上进行降序排序,确保每一列都指定DESC关键字。
与DESC相反的关键字是ASC(意思是ascending),表示升序排序。实际上,ASC不经常使用,因为它是默认序列(即既没有指定ASC,也没有指定DESC)。
提示
区分大小写和排序次序 如果你对文本进行排序,A与a相同吗?a在B之前还是在Z之后呢?这些不是理论性的问题,答案取决于数据库是如何设置的。
在字典排序顺序中,认为A与a相同,这是MariaDB中的默认行为(许多其他DBMS也一样)。然而,如果需要,管理员可以更改这种默认行为。(如果数据库包含大量外文字符,可能就需要这样做。)
这里的关键在于,如果需要改变这种排序,一个简单的ORDER BY子句无法做到。如果需要修改列字符集,需要使用CONVERT()函数(函数在第11章介绍)或者联系数据库管理员。
结合使用ORDER BY和LIMIT时,就有可以找出列中的最大值和最小值。下面的例子演示如何找到价格最高的产品:
▼ 输入
▼ 输出
▼ 分析
“prod_price DESC”确保检索到的行按照价格由高到低排序,“LIMIT 1”告诉MariaDB仅返回一行。
警告
ORDER BY子句的位置 当指定ORDER BY子句时,确保它在FROM子句之后。如果使用LIMIT,LIMIT必须跟在ORDERBY之后。如果不按照这样的顺序,将会产生错误信息。