美文网首页
SQL 对检索结果进行排序

SQL 对检索结果进行排序

作者: 山药鱼儿 | 来源:发表于2022-03-06 16:14 被阅读0次

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;

排序检索结果:

ASCDESC

排序时默认按照升序排列,即 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 语句中的最后一条子句。

相关文章

网友评论

      本文标题:SQL 对检索结果进行排序

      本文链接:https://www.haomeiwen.com/subject/bfcwrrtx.html