如何对查询结果进行排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何对查询结果进行排序相关的知识,希望对你有一定的参考价值。

1. 单列排序

我们先来看下不排序的结果:

SELECT prod_name FROM products;

运行结果如下:

如何对查询结果进行排序_多列

接下来我们对 prod_name 列进行排序。排序使用 ORDER BY 关键字,后面跟着要排序的列。例如:

SELECT prod_name FROM products ORDER BY prod_name;

运行结果如下:

如何对查询结果进行排序_升序_02

可以看到结果按照升序进行了排序。

当我们不明确指定排序的顺序时,mysql 默认按照升序排序。效果和我们明确指定升序是一样的,如果要明确指定按照升序排序,我们只要在需要排序的字段后面指定 ASC。例如:

SELECT prod_name FROM products ORDER BY prod_name ASC;

运行结果如下:

如何对查询结果进行排序_c关键字_03

可以看到结果和不明确指定排序顺序是一样的。

和升序相对应的,我们可以进行降序排序。语法和升序一样,只不过 ASC 改成 DESC。例如:

SELECT prod_name FROM products ORDER BY prod_name DESC;

运行结果如下:

如何对查询结果进行排序_c关键字_04

我们可以看到,结果是降序排序的。

2. 多列排序

除了可以对单列进行排序,我们还可以对多列进行排序,例如:

SELECT prod_price, prod_name FROM products ORDER BY prod_price, prod_name;

运行结果如下:

如何对查询结果进行排序_c关键字_05

像单列排序一样,我们同样可以明确指定排序顺序,例如:

SELECT prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name;

运行结果如下:

如何对查询结果进行排序_多列_06

我们可以看到,结果按照 prod_price 进行了降序排序,但是当 prod_price 相等时,prod_name 还是按照升序进行排序,这说明 DESC 关键字只对位于其前面的列名起作用,

如果想在多个列上进行降序排序,必须对每一列指定DESC关键字。例如:

SELECT prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name DESC;

运行结果如下:

如何对查询结果进行排序_多列_07

我们可以看到,当 prod_price 相等时,prod_name 同样按照降序进行了排序。

刚才讲的排序,ORDER BY 后面跟的列都是我们要查询的列,实际上,用非查询的列排序数据也是可以的。例如:

SELECT prod_name FROM products ORDER BY prod_price;

运行结果如下:

如何对查询结果进行排序_多列_08

ORDER BY 后面除了跟列名之外,我们还可以使用查询列的相对位置。

SELECT prod_id, prod_price, prod_name FROM products ORDER BY 2, 3;

运行结果如下:

如何对查询结果进行排序_多列_09

这种排序方式的优点是:不用重复输入列名。缺点是:1.有可能用错误的列进行排序,特别是在检索列改变后,忘记对order by子句做相应的改动。2.如果要进行排序的列不在检索的列中,就不能使用相对位置。

下列哪一个关键字的作用是排序?

A. ORDER BY

B. ASC

C. DESC

D. SELECT

下列哪一个关键字的作用是降序排序?

A. ORDER BY

B. ASC

C. DESC

D. SELECT

以上是关于如何对查询结果进行排序的主要内容,如果未能解决你的问题,请参考以下文章

21《MySQL 教程》ORDER BY 排序

第三章 集合与排序 3-4 对查询结果进行排序

如何对Access数据库查询结果进行重新编号排序啊,自动编号的方式也行

如何对 Sequelize 中的查询结果进行排序?

在SELECT语句中,对查询结果进行排序的子句是啥?能消除重复行的关键字是啥?

Mysql——实现按字段部分升序,部分降序的方法