在数据库查询中,经常需要对结果进行排序,以便更清晰地查看数据。SQL提供了强大的排序功能,允许根据一个或多个列来排序数据。此外,还可以限制查询结果的数量,以便快速获取最重要的信息。本文将介绍如何使用SQL语句进行数据排序和限制结果数量。
要对查询结果进行排序,可以使用ORDER BY
子句。这个子句位于FROM
子句之后,用于指定用于排序数据的列或表达式。默认情况下,排序是按照升序(从小到大)进行的,也可以明确指定为降序(从大到小)。
例如,如果想按照姓氏对人员进行排序,可以使用以下SQL语句:
SELECT FirstName, LastName FROM Person.Person ORDER BY LastName;
如果想要按照降序排序,可以使用DESC
关键字:
SELECT FirstName, LastName FROM Person.Person ORDER BY LastName DESC;
这里的DESC
代表降序。
除了可以按照一个列排序,还可以按照多个列进行排序。只需用逗号分隔想要排序的列即可。例如,如果想按照订单数量和单价对订单详情进行排序,可以使用以下SQL语句:
SELECT PurchaseOrderID, OrderQty, UnitPrice FROM Purchasing.PurchaseOrderDetail ORDER BY OrderQty, UnitPrice;
在这个示例中,还可以指定每列的排序顺序。例如,可以按照订单数量升序和单价降序进行排序:
SELECT PurchaseOrderID, OrderQty, UnitPrice FROM Purchasing.PurchaseOrderDetail ORDER BY OrderQty ASC, UnitPrice DESC;
到目前为止,已经学会了如何按照一个或多个列进行排序,但是否知道还可以按照表达式进行排序呢?例如,考虑订单详情表,可能想知道谁的订单最大。当然,可以按照数量或单价进行排序,但总价格呢?这个列在表中并不存在,但在上一课中学习了如何创建它作为表达式。可以使用它进行排序吗?当然可以!
查看以下示例,注意ORDER BY
子句,那里是按照总价格(单价 * 数量)进行排序的:
SELECT PurchaseOrderID, UnitPrice, OrderQty FROM Purchasing.PurchaseOrderDetail ORDER BY UnitPrice * OrderQty;
为了更清晰,还可以显示总价格:
SELECT PurchaseOrderID, UnitPrice, OrderQty, UnitPrice * OrderQty AS TotalPrice FROM Purchasing.PurchaseOrderDetail ORDER BY UnitPrice * OrderQty;
在这里,使用了别名,或者重命名字段,来帮助。在SELECT
子句中,UnitPrice * OrderQty
被重命名为TotalPrice
。现在已经完成了,可以简单地引用TotalPrice
来指定排序顺序。
SELECT PurchaseOrderID, UnitPrice, OrderQty, UnitPrice * OrderQty AS TotalPrice FROM Purchasing.PurchaseOrderDetail ORDER BY TotalPrice;
最后,想介绍的是能够限制排序结果返回的数量。这使得返回“前十个”或“前十个”项目变得非常容易。例如,如果想要知道前五个订单详情项目,可以在SSMS中输入以下查询:
SELECT TOP 5 PurchaseOrderID, UnitPrice, OrderQty, UnitPrice * OrderQty AS TotalPrice FROM Purchasing.PurchaseOrderDetail ORDER BY TotalPrice;
TOP
关键字限制了搜索结果为前五行。当然,也可以限制其他数量,事实上还可以限制任何由表达式得出的数量。
提示:要获取结果的最后五行,例如最小的五个订单,只需将结果按降序排序即可。
练习是非常重要的!使用示例数据库回答以下问题。
编写一个语句,选择员工的NationalIDNumber
、MaritalStatus
、BirthDate
和JobTitle
,并按BirthDate
排序。
编写一个语句,选择人的名和姓,并按他们姓氏的大写等价物排序。记得:在上一课讨论了UPPER
。
选择排序后的Person LastNames
中前两个名字。
选择排序后的Person LastNames
中最后两个名字。
恭喜!刚刚学会了如何使用select
命令查询数据库。更多的教程即将到来!