当使用该SELECT语句从表中查询数据时,结果集不会排序。这意味着结果集中的行可以按任何顺序排列。
要对结果集进行排序,请将ORDER BY子句添加到SELECT语句中
SELECT select_list FROM table_name ORDER BY column1 [ASC|DESC],column2 [ASC|DESC],
...;
使用这种语法,可以在ORDER BY子句后指定要排序的一列或多列。
该ASC代表升序和DESC代表降序。ORDER BY子句按升序对结果集排序:
ORDER BY column1 ASC;
此ORDER BY子句对结果集按降序排序:
ORDER BY column1 DESC;
默认情况下,如果您未明确指定任何选项,则该ORDER BY子句使用ASC。
如果要按多列对结果集进行排序,请在ORDER BY子句中指定以逗号分隔的列列表:
ORDER BY
column1,
column2;
可以对结果进行升序排列,然后再对另一列进行降序排列:
ORDER BY
column1 ASC,
column2 DESC;
在这种情况下,该ORDER BY子句:首先,按照值column1升序对结果集进行排序。
然后,按值column2 降序对排序的结果集进行排序。请注意,column1在此步骤中不会更改,只会column2更改值中的顺序。
请注意,该ORDER BY子句始终在FROMand SELECT子句之后进行求值。
示例A 使用MySQL ORDER BY子句对一列示例中的值进行排序
以下查询使用该ORDER BY子句按contactLastName列中的值以升序对客户进行排序。SELECT contactLastname, contactFirstname FROM customers
ORDER BY contactLastname;
升序排列
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;
别名
在此示例中,我们用作表达式subtotal的列别名,quantityOrdered * priceEach并按别名对 结果集进行排序subtotal。
可以在ORDER BY子句中使用列别名,因为在SELECT子句之前先评估该ORDER BY子句。在ORDER BY评估该子句时,可以访问列别名。