MySQL ORDER BY
简介:在本教程中,您将学习如何使用MySQL ORDER BY子句对结果集进行排序。
MySQL ORDER BY子句简介
当您使用SELECT语句从表中查询数据时,结果集不会排序。
这意味着结果集中的行可以按任何顺序排列。
要对结果集进行排序,可以将ORDER BY子句添加到SELECT语句中。
以下说明了ORDER BY子句的语法:
SELECT select_list FROM table_name ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;
使用这种语法,您可以在ORDER BY子句后指定要排序的一列或多列。
ASC代表升序,DESC代表降序。
您使用ASC对结果集进行升序排序,并使用DESC对结果集进行降序排序。
此ORDER BY子句按升序对结果集排序:
ORDER BY column1 ASC;
并且此ORDER BY子句以降序对结果集进行排序:
ORDER BY column1 DESC;
默认情况下,如果您未明确指定任何选项,则ORDER BY子句将使用ASC。
因此,以下子句是等效的:
ORDER BY column1 ASC;
和
ORDER BY column1;
如果要按多列对结果集进行排序,则可以在ORDER BY子句中指定以逗号分隔的列列表:
ORDER BY column1, column2;
可以对结果进行升序排列,然后再对另一列进行降序排列:
ORDER BY column1 ASC, column2 DESC;
在这种情况下,ORDER BY子句:
首先,将结果集按column1中的值按升序排序。
然后,按column2中的值以降序对排序的结果集进行排序。
请注意,在此步骤中,column1中值的顺序不会改变,仅column2中值的顺序会改变。
注意,ORDER BY子句总是在FROM和SELECT子句之后求值。
MySQL ORDER BY示例
我们将使用示例数据库中的客户表进行演示。
A)使用MySQL ORDER BY子句对一列示例中的值进行排序
以下查询使用ORDER BY子句按contactLastName列中的值以升序对客户进行排序。
SELECT contactLastname, contactFirstname FROM customers ORDER BY contactLastname;
如果要按姓氏降序对客户进行排序,请在ORDER BY子句的contactLastname列之后使用DESC,如以下查询所示:
SELECT contactLastname, contactFirstname FROM customers ORDER BY contactLastname DESC;
B)使用MySQL ORDER BY子句对多列示例中的值进行排序
如果要按姓氏降序对客户排序,然后按姓氏升序对客户排序,请在相应列中同时指定DESC和ASC,如下所示:
SELECT contactLastname, contactFirstname FROM customers ORDER BY contactLastname DESC, contactFirstname ASC;
在此示例中,ORDER BY子句按姓氏先对降序的结果集进行降序排序,然后按名字对升序对排序的结果集进行升序排序以生成最终结果集。
C)使用MySQL ORDER BY通过表达式示例对结果集进行排序
请参阅示例数据库中的以下orderdetails表。
以下查询从orderdetails表中选择订单行项目。
它计算每个订单项的小计,并根据小计对结果集进行排序。
SELECT orderNumber, orderlinenumber, quantityOrdered * priceEach FROM orderdetails ORDER BY quantityOrdered * priceEach DESC;
为了使查询更具可读性,可以在SELECT子句中为表达式分配一个列别名,并在ORDER BY子句中使用该列别名,如以下查询所示:
SELECT orderNumber, orderLineNumber, quantityOrdered * priceEach AS subtotal FROM orderdetails ORDER BY subtotal DESC;
在此示例中,我们使用小计作为表达式quantityOrdered * priceEach的列别名,并按小计别名对结果集进行排序。
可以在ORDER BY子句中使用列别名,因为SELECT子句在ORDER BY子句之前进行求值。
在评估ORDER BY子句时,可以访问列别名。
使用MySQL ORDER BY使用自定义列表对数据进行排序
ORDER BY子句允许您通过使用FIELD()函数使用自定义列表对数据进行排序。
请参阅示例数据库中的以下订单表。
假设您要根据以下订单中的状态对销售订单进行排序:
- 进行中
- 等候接听
- 取消
- 解决
- 争议
- 已出货
为此,可以使用FIELD()函数将每个订单状态映射到一个数字,并根据FIELD()函数的结果对结果进行排序:
SELECT orderNumber, status FROM orders ORDER BY FIELD(status, 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped');
下面的表达式:
FIELD(status, 'In Process', 'On Hold', 'Cancelled', 'Resolved', 'Disputed', 'Shipped');
返回"处理中","保留","已取消","已解决","有争议","已发货"列表中状态的索引。
例如,如果状态为处理中,则函数将返回1。
如果状态为保留,则函数将返回2,依此类推。
在本教程中,您学习了如何使用MySQL ORDER BY子句按一个或多个列以升序或降序对结果集中的行进行排序。