「这是我参与11月更文挑战的第14天,活动详情查看:2021最后一次更文挑战」
单列排序
正如昨天的文章,下面的SQL语句返回某个数据库表的单个列。但请看它的输出并没有特定的顺序:
select p_name from products;
其实,检索出的数据并不是以纯粹的随机顺序显示的。如果不排序,数据一般将以它在底层表中出现的顺序显示。为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。ORDER BY子句取一个或多个列的名字,据此对输出进行排序。
请看下面例子:
select p_name from products order by p_name;
这条语句除了指示MySQL对prod_name列以字母顺序排序数据的ORDER BY子句外,与前面的语句相同。结果如下:
ORDER BY子句中使用的列将是为显示所选择的列。
按多个列排序
经常需要按不止一个列进行数据排序。为了按多个列排序,只要指定列名,列名之间用逗号分开即可(就像选择多个列时所做的那样)。
例如:
select p_id,p_price,p_name from products order by p_price,p_name;
结果如下
重要的是理解在按多个列排序时,排序完全按所规定的顺序进行。换句话说,对于上述例子中的输出,仅在多个行具有相同的p_price值时才对产品按p_name进行排序。如果p_price列中所有的值都是唯一的,则不会按p_name排序。
指定排序方向
数据排序不限于升序排序(从A到Z)。还可以使用DESC关键字,进行降序排序。 下面的例子按价格以降序排序产品(最贵的排在最前面):
select p_id,p_price,p_name from products order by p_price DESC;
但是,如果打算用多个列排序怎么办?下面的例子以降序排序产品(最贵的在最前面),然后再对产品名排序:
select p_id,p_price,p_name from products order by p_price DESC,p_name;
DESC关键字只应用到直接位于其前面的列名。在上例中,只对prod_price列指定DESC,对prod_name列不指定。因此,prod_price列以降序排序,而prod_name列(在每个价格内)仍然按标准的升序排序。
通常使用ORDER BY和LIMIT的组合,能够找出一个列中最高或最低的值。这里就不做演示了。