ORDER BY 子句
有如下的顾客信息表:

检索出所有的客户名称:
SELECT cust_name
FROM Customers;
检索结果:

检索结果未进行过排序的,数据可能是它出现在表中的顺序,也可能是最初被添加到表中的顺序。总之,在未指定排序规则的情况下,不应该认为检索出的数据顺序有任何意义。
为了对 SELECT
语句检索出的数据进行排序,我们需要用到 ORDER BY
子句:ORDER BY
子句取一个或多个列的名字,据此对输出进行排序。
SELECT cust_name
FROM Customers
ORDER BY cust_name;
排序结果:

ORDER BY 子句的位置:在指定一条
ORDER BY
子句时,应该保证它是SELECT
语句中最后一条字句,否则将产生语法错误。
此外,使用非检索的列排序也是完全合法的。比如出现在 ORDER BY
字句后的列可以不是 SELECT
语句后面的列。
SELECT cust_name
FROM Customers
ORDER BY cust_zip;
按照 cust_zip
排序的检索结果:

按多个列排序数据
检索数据时,我们经常遇到需要先按某个列进行排序,然后再按另一个列进行排序。按多个列进行排序时,只需要将多个列以逗号为分隔符放在 ORDER BY
语句之后即可。
下面是顾客消费的订单表:

接下来,我们将检索出客户 ID 和订单日期,并将结果优先按照顾客 ID 排序然后按照订单日期排序。
SELECT cust_id, order_date
FROM Orders
ORDER BY cust_id, order_date;
排序检索结果:

ASC 和 DESC
排序时默认按照升序排列,即 ASC
的形式;可以将 DESC
置于列名之后,将会按照该列进行降序排序。
注:DESC 关键字只作用于直接位于其前面的列名。
还是以上面的订单表为例,现在我们检索时需要先按客户 ID 正序排列,再按照订单时间进行降序排列,也就是所有客户的订单中,都是最近的订单放在最前面展示。
SELECT cust_id, order_date
FROM Orders
ORDER BY cust_id, order_date DESC;
排序结果:

再比如下面的订单详情表:

我们希望按照销量从高到低、价格从高到低来检索数据:
SELECT *
FROM OrderItems
ORDER BY quantity DESC, item_price DESC;
检索结果:

小结
本节,小鱼和大家一起学习了 SELECT 语句中 ORDER BY 子句排序检索数据的方法,其中 ORDER BY 字句必须是 SELECT 语句中的最后一条子句。
网友评论