您已经知道要返回结果,您必须使用SQL SELECT语句。关于那个的事情是,SQL选择只需按升序返回行。如果你需要特定的话怎么办命令的结果了吗?

要对SQL SELECT语句的结果进行排序,可以使用ORDER BY命令。

在本教程中,我们将了解使用ORDER BY的基础知识,以及一些更高级的SQL ORDER BY主题。最后,您将了解如何对大多数命令使用ORDER By。

完整的SQL训练营2021:从零到英雄

最近更新于2020年10月

畅销书
  • 83课
  • 各级
4.7 (96798)

成为SQL专家!|由穆Portilla

探索课程

在SQL中排序数据

由于SQL是一个数据库系统,对记录进行排序是SQL编程中的一个关键功能。当您从数据库中检索多个记录时,您需要能够按照某种顺序对它们进行排序,这样您就可以通过查看检索到的记录列表轻松地找到特定的记录。

为了真正有帮助,排序命令应该能够通过任何可用列对记录进行排序。它还应该能够以指定的顺序排序多个列,并且顺序由表达式确定的顺序多于微不足道的复杂性。命令的SQL订单可以完成所有这些。

首先,让我们检索一些记录

让我们从一个基本排序开始。在SQL中,使用SELECT命令检索记录,以格式从[表]中选择[Column_1,Column_2等],如下所示:

选择名称,城市,出生,来自人民的最受欢迎者;

它可能会产生以下结果:

鲍勃圣地亚哥06/07蓝色辛迪吉隆坡05/09橙色简新加坡12/27绿色林旧金山01/17红色兰迪柏林10/21黄色

下面是如何进行基本排序

要对记录进行排序,添加ORDER BY:

SELECT name,city,birthday,favorite_color FROM people ORDER BY city;

这样对记录进行分类:

兰迪柏林10/21黄色Cindy吉隆坡05/09橙色鲍勃圣地亚哥06/07蓝林旧金山01/17红妖新加坡12/27绿色

如果你将排序命令改为:

由favorite_color秩序;

记录如下:

蓝色Jane新加坡12/27绿色Cindy吉隆坡05/09橙色林旧金山01/17红色Randy柏林10/21黄色

你是把这些记录“整理”还是“整理”?

请注意,记录总是按所选列的字母顺序排列的。如果按数字列排序,则它们将从低到高排序。

这是因为,在默认情况下,ORDER by命令按升序对它进行排序。很多时候,这样做是完全合理的。尽管如此,有时你还是会想要颠倒顺序。你可以使用DESC选项来做到这一点,它告诉ORDER BY按降序排序:

Chentory_Color DESC订购;

现在看看订单:

Randy Berlin 10/21 yellow Lin San Francisco 01/17 red Cindy Kuala Lumpur 05/09橙色Jane Singapore 12/27 green Bob San Diego 06/07蓝色

注意,还有一个ASC选项,它显式地告诉ORDER BY按升序对结果集排序。由于默认情况下它通常是升序的,所以SQL order by子句通常不需要您指定。但有时它可能会派上用场。ASC和DESC都是您将使用的主要方法来按命令排序,并且,同样,升序数据是默认选择。

当然,这会影响行,而不是列列表。您将按照select语句中指定的顺序看到列。要对数据进行排序,您需要按希望的顺序拉出每一列。SELECT *通配符将拉出整个表的列。当您创建表时,您应该按照您想要的顺序保存列。

从用户透视中排序

DESC选项是那些编程基础之一,允许您对程序的用户很好。你可以给他们一个基本的“排序”选择。允许它们输入或选择“排序列”,然后将其与排序的记录列表呈现。如果他们需要在列表结束时找到一些东西,他们可以滚动或向下滚动,直到他们找到它。

但是如果您想要考虑得更周全一些,您可以包括一个“降序”选项,它会自动实现Order BY选项DESC。对于一长串记录来说,这可能会产生重大影响。

当涉及到用户界面时,排序是经常帮助用户控制他们查看数据的方式。默认情况下,列表对他们来说可能是完全随机的;对数据进行排序和筛选的能力可以确保他们获得与搜索最相关的数据。

但是也应该总是有一个默认的排序,这样开发人员也知道信息将以可预测的顺序显示。当数据以完全随机的顺序返回时,只会增加故障排除的难度。

通过名称或数字进行排序

但是,如果你不确定你要选择的记录是什么选择的?也许您正在编写一个程序,该程序使用任何类型的多个表,每个表都有不同的列名,或者可以根据用户输入请求SQL查询可以请求不同的列。在任何一种情况下,您都可以通过使用列号而不是列名称对列的相对位置进行排序,使您的代码更通用:

订购1;

无论列的名称是什么,都按第一列对记录进行排序:

鲍勃圣地亚哥06/07蓝色辛迪吉隆坡05/09橙色简新加坡12/27绿色林旧金山01/17红色兰迪柏林10/21黄色

在这一点上写作应用中,在编程语言本身上完成了大量的举重。例如,在PHP中,该表可能是PHP语言中的“$表” - 因此SQL查询本身不需要补偿这些更改。

在编程语言和SQL代码之间使用这些类型的交互时,应该小心。并不总是需要在SQL中保存表达式和变量;相反,它们可以保存在应用程序的本地语言中。

在排序中使用多列

对于一长组记录,您可能希望不仅按一列排序,还按多列排序。例如,假设我们数据库中的大量人员来自同一个城市;然后,根据它们的名称和城市对它们进行排序是很有用的。ORDER By可以包含多个列,每个列的名称(或编号)用逗号分隔:

ORDER BY城市名称;

它生成一个先按city列排序,然后按name列排序的列表:

蓝迪柏林10月21黄色肾上腺旧金山查特瑞斯林旧金山红色Xochtil旧金山11月12绿松石简新加坡12月27绿色

请注意,通过许多SQL实现,您可以混合列名称和数字,如下所示:

订购2,名称;

通过多列排序对所提供的数据提供更加粒度的控制,并且在处理异常大数据集时可能非常有用。对于名称和用户名,最多应用程序将希望能够按字母顺序排序,即使有另一列被用作主要顺序。

在排序中扭转一列

您可以为单个列指定排序顺序,以便例如,初始排序处于降序,而第二种排序默认(升序)顺序:

按城市DESC订购,名称;

这颠倒了排序的第一部分:

Jane新加坡12/27绿色adrenne旧金山03/05 Chartreuse Lin San Francisco 01/17 Red Xochtil San Francisco 11/12绿松石兰迪柏林10/21黄色

此命令以默认顺序留下初始排序,并反转第二种排序:

按城市订购,名称DESC;

这颠倒了排序的第二部分:

Randy Berlin 10/21 yellow Xochtil San Francisco 11/12 turquoise Lin San Francisco 01/17 red肾上腺素San Francisco 03/05 chartreuse Jane Singapore 12/27 green

您可以用ASC和DESC选项显式为每列进行分类顺序。如果您希望按升序或降序所需的列,例如必须链接的客户表或订单表中,这是重要的。

值得注意的是,大多数查询默认情况下将返回ASC命令。但这也取决于查询被视为主要标识符的内容。如果您有一个人列表,除非另有说明,否则它将排序唯一的ID或主键,而不是人的姓名。

限制某种返回的查询

除了按查询订购,还有限制查询。限制查询限制了您回来的行数。因此,如果您只想选择最佳结果(第一行),您可能会使用“限制1.”如果您需要前100行,您将使用“限制100”。而且您仍然可以对查询结果进行排序,但是您需要。还有一些高级功能,例如选择distinct,以进一步限制返回的查询。

此外,如果您想显示20条记录,则可以“限制10,20”但是开始在纪录10。

为什么这有用?多次,当返回大量记录时,应用程序将将返回的记录限制为一定数量。从那里,用户将能够通过其他记录页面页面,向后移动到它们之间。

SQL组是另一种组织和组织查询的方法,但它比简单的SQL SELECT语句更高级。您可以使用它来将结果设置为特定组。另一个高级语句是插入选择的,该选项允许您创建一个选择查询,也可以函数作为插入件,尽管您必须匹配类型。

遇到数据类型问题

请注意,并非所有数据类型都可以进行排序,而且并非所有数据都必须按照您期望的方式进行排序。您存储为数字数据类型的数字将在数字上排序,并按日期数据类型存储的日期将按顺序排序。但是,根据SQL实现,存储为文本/字符数据的数字或日期可能会按字母顺序排序。这是一个可能会提出的问题,例如,零件号。

同样,根据SQL实现,可能无法对某些数据类型进行排序。例如,在Microsoft的Transact-SQL中,不能使用ORDER BY对以下数据类型进行排序:不同于可排序的字符数据类型)、ntext (Unicode等价的文本数据类型)、图像、XML、几何和地理。

在排序期间使用表达式

我们提到了订单可以将表达式作为参数。如您可能想象的那样,从(除其他内容)上开辟了广泛的可能性,它允许您在可能非常复杂的条件集中基本排序顺序。例如(再次,根据SQL实现和允许表达式语法),您可以使用案例语句来确定排序字段:

按情况排序城市当'San Francisco'然后favorite_color ELSE城市结束;

这对城市是旧金山的所有记录进行了排序,由City和所有其他历史记录排序。

表达可能变得非常复杂。但更复杂表达的危险是他们可以让您的查询更难阅读。利用它们太多,其他程序员可能不明白您尝试返回的数据类型。

用空值排序

如果一个列包含空数据,您可能希望对记录进行排序,使空值位于列表的开头或结尾。在Oracle SQL中,你可以先使用空值来设置排序,这样空值就被列在前面,空值最后被列在后面:

首先由收藏夹nulls订购;

然后首先列出rentory_color列中使用null的任何记录:

花洛杉矶05/14 NULL Raquel波哥大11/07 NULL Bob San Diego蓝色简新加坡12/27绿色辛迪吉隆坡05/09橙色林旧金山01/17红色兰迪柏林10/21黄色

请注意,如果排序顺序升序,则返回空缺是默认值,如果排序顺序降序,则为null是默认值。由于默认排序顺序升序,因此您不需要最后指定ASC和NULL。这条线:

由favorite_color秩序;

这行:

ressubly_color asc null上次订购;

是等价的。

在非Oracle SQL实现中,您可以使用案例语句或类似的条件表达式来设置排序中的NULL的位置。

使用Transact-SQL进行高级排序:Collat​​e

在Microsoft的Transact-SQL中,您可以使用Collat​​e参数指定排序方式如何处理诸如重音,案例和字符集等内容。Collat​​e与Char和Varchar数据类型及其Unicode等同物,NCHAR和NVARCHAR兼容。

Colleat参数采用排序规则名称,以及附加到名称的一组选项,并使用下划线分隔。例如,以下命令将使用Breton Colration按名称对记录进行排序:

按名称命令constate breton_100_;

如果要指定排序规则应该是区分大小写和重音敏感,则通过附加这些选项将这样做:

按名称命令constate breton_100_cs_as;

当然,如果你使用Oracle DB或者MySQL,这就不适用了。

开发的最高课程bob外围官网

完整的2021年飞镖开发训练营bob外围官网
安吉拉Yu博士
4.7 (30478)
畅销书
2021在Python中完成从零到英雄的Python训练营
何塞Portilla
4.6 (358,023)
畅销书
完整的JavaScript课程2021:从零到专家!
乔纳斯Schmedtmann
4.7 (102294)
畅销书
数据科学课程2021:完成数据科学训练营
365个职业,365个职业团队
4.6 (90,030)
畅销书
Unreal Engine c++开发者:学习c++并制作视频游戏
Ben Tristem, Sam Pattuzzi,游戏开发者。电视团队,Rob Brooks
4.6 (51006)
畅销书

更多的发展bob外围官网课程

使用Transact-SQL进行高级排序:偏移和获取

Transact-SQL还允许跳过指定数量的记录,并在排序之后返回指定数量的记录。OFFSET参数(从SQL Server 2012开始可用)返回在指定行数之后开始的记录。例如:

ORDER BY Name OFFSET 25 ROWS;

首先按名称列对记录进行排序,然后跳过25条记录,并在此之后返回所有记录。

您可以使用它快速地对大量已排序的记录进行分页,而不必将所有记录发送到客户机应用程序。例如,用户可以指定要跳过的记录数量(基于所需记录可能在哪里的大致估计),然后从那里滚动或翻页来查找相关记录。

您可以使用带有OFFSET的FETCH参数来指定在OFFSET之后返回的记录数量。如果你想跳过150条记录,然后返回下35条记录,你可以使用这个命令:

订购按名称偏移150行仅获取接下来的35行;

OFFSET和FETCH都可以接受变量或表达式作为参数,所以要OFFSET的行数和要取的行数都可以通过条件表达式或表示用户输入或计算值的变量来设置。

通过拍摄一些,您可以了解更多关于SQL的更多信息优秀的课程在线提供,包括MySQL,Oracle和SQL Server中的开头和高级课程。

如果您有兴趣了解另一个有用的SQL命令,那么让我们从INNER JOIN命令开始。

SQL中的顶级课程

SQL和PostgreSQL:完整的开发人员指南
Stephen主梁
4.7 (1254)
收视率最高
完整的SQL训练营2021:从零到英雄
何塞Portilla
4.7 (96798)
畅销书
终极MySQL训练营:从SQL初学者到专家
Colt Steele,Ian Schoonover
4.6 (53,072)
畅销书
SQL - 用于数据分析和商业智能的MySQL
365职业
4.6 (26,979)
畅销书
完成SQL和数据库训练:从零到精通[2021]
Andrei Neagoie, Mo Binni
4.6 (1,344)
SQL初学者:使用MySQL和数据库设计学习SQL
Tim Buchalka's Learn Programming Academy, Jon Avis - SQL讲师
4.5 (8925)
SQL&PostgreSQL为初学者:成为一个SQL专家
Jon Avis - SQL讲师
4.5 (3,113)
畅销书
学习高级T-SQL供SQL Server管理员使用
Raphael Asghar.
4.4 (415)
使用BigQuery应用数据分析/数据科学的SQL
杰夫•詹姆斯
4.8 (20)
收视率最高

更多SQL课程

SQL学生还学习

让你的团队。领导行业。

通过Udemy为Business获取组织的在线课程和数字学习工具库的订阅。

请求演示