您已经知道要返回结果,必须使用SQL SELECT语句。关于这一点,SQL SELECT只是按升序返回行。如果你需要一个具体的命令的结果了吗?

要对SQL Select语句进行排序,请使用命令使用顺序。

在本教程中,我们将通过主题查看使用订单的基础知识,以及主题的一些更高级的SQL订单。到最后,您将了解如何使用订单以获取大多数命令。

完整的SQL Bootcamp 2021:从零到英雄

上次更新10月2020年

畅销书
  • 83课
  • 所有级别
4.7 (97380)

成为SQL专家!|何塞波罗拉

探索课程

用SQL对数据进行排序

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

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

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

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

SELECT name,city, birthday,favorite_color FROM people;

它可能会产生以下结果:

Bob San Diego 06/07蓝色Cindy Kuala Lumpur 05/09 Orange Jane新加坡乐队12/27绿林旧金山01/17红兰迪柏林10/21黄色

以下是如何做基本排序

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

SELECT name,city,birthday,favorite_color FROM people

这样对记录进行排序:

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

如果将sort命令更改为:

按收藏品_color订购;

记录的顺序如下:

Bob San Diego 06/07蓝色简新加坡12/27绿色Cindy吉隆坡05/09橙色林旧金山01/17红兰迪柏林10/21黄色

您是否在将这些记录分类为“UP”或“DEPLE”吗?

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

这是因为,默认情况下,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绿色Bob San Diego 06/07蓝色

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

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

从用户透视中排序

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

但是如果您想要更加密切,您可以包含“降序”选项,该选项可自动实现DESC选项按顺序实现。对于长长的记录列表,这可能会产生重大区别。

涉及用户界面时,排序是经常有助于让用户控制他们查看数据的方式。默认情况下,列表可能似乎完全随意;对筛选和过滤数据的能力可确保他们获得与他们搜索最相关的数据。

但也应该始终存在默认排序,因此开发人员也知道信息将以可预测的顺序显示。当数据以完全随机顺序返回时,它只会使排除困难​​难以解决。

通过名称或数字进行排序

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

订购1;

按第一列排序,无论该列的名称是什么:

Bob San Diego 06/07蓝色Cindy Kuala Lumpur 05/09 Orange Jane新加坡乐队12/27绿林旧金山01/17红兰迪柏林10/21黄色

在编写应用程序时,很多繁重的工作都是在编程语言本身中完成的。例如,在PHP中,表在PHP语言中可能是“$table”——因此SQL查询本身不需要补偿这些更改。

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

在排序中使用多列

通过一系列的记录,您可能希望不仅仅按一列或由多个列进行排序。例如,假设我们数据库中的大量人来自同一个城市;然后它用他们的名字和城市对它们进行排序有用。顺序可以拿多列,每个由逗号分隔的名称(或数字):

按城市订购,名称;

它生成第一个由城市列订购的列表,然后由名称列订购:

兰迪柏林10/21黄色adrenne旧金山03/05兰特鲁斯林旧金山01/17红色xochil旧金山11/12绿松石简新加坡12/27绿色

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

订购2,名称;

按多列排序提供了对所呈现数据的更细粒度的控制,在处理特别大的数据集时非常有用。对于姓名和用户名,大多数应用程序希望能够按字母顺序排序,即使有另一列被用作主要顺序。

颠倒排序中的一列

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

按城市DESC订购,名称;

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

简新加坡12/27绿色肾上腺旧金山03/05黄绿色林旧金山01/17红色Xochtil旧金山11/12蓝绿色兰迪柏林10/21黄色

这个命令将初始排序保留为默认顺序,并将第二种排序倒过来:

按城市订购,名称DESC;

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

兰迪柏林10/21黄色Xochtil旧金山11/12绿松石林旧金山01/17红色肾上腺旧金山03/05黄绿色简新加坡12/27绿色

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

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

限制排序返回的查询

除了ORDER BY查询之外,还有LIMIT查询。LIMIT查询限制接收回的行数。因此,如果您只想选择顶部结果(第一行),您可以使用“LIMIT 1”。如果需要前100行,可以使用“LIMIT 100”。您仍然可以按自己的意愿对查询结果进行排序。还有一些高级函数,比如SELECT DISTINCT,可以进一步限制返回的查询。

此外,如果你想要显示20条记录,你可以“LIMIT 10,20”开始在记录10。

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

SQL GROUP是对查询进行分组和组织的另一种方法,但是它比简单的SQL选择语句要高级一些。您可以使用它将结果集排序到特定的组中。更高级的语句是INSERT INTO SELECT,它允许您创建一个同样具有INSERT功能的SELECT查询,不过您必须匹配类型。

遇到数据类型问题

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

同样,根据SQL实现,可能无法对某些数据类型进行排序。In Microsoft’s Transact-SQL, for example, you cannot use ORDER BY to sort the following data types: text (a variable-length field with a maximum length of 2 GB; distinct from the sortable character data types), ntext (the Unicode equivalent of the text data type), image, XML, geometry, and geography.

在排序期间使用表达式

我们提到过ORDER BY可以接受一个表达式作为参数。正如您可以想象的那样,这将带来广泛的可能性,因为它允许您基于一组可能非常复杂的条件来排序。例如(同样,取决于SQL实现和允许的表达式语法),你可以使用CASE语句来确定排序字段:

ORDER BY CASE city WHEN 'San Francisco' THEN favorite_color ELSE city END;

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

表达式可以变得极其复杂。但是使用更复杂的表达式的危险在于,它们会使您的查询更加难以阅读。如果过多地使用它们,其他程序员可能无法理解您要返回的数据类型。

用空值排序

如果列包含空数据,则可能需要对记录进行排序,以便为列表的开头或结尾进行排序。在Oracle SQL中,您可以首先使用NULLS来设置排序,以便首先列出NULL和NULL返回,以便它们最近列出:

首先由收藏夹nulls订购;

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

华洛杉矶05/14 Null Raquel Bogota 11/07 Null Bob San Diego 06/07 Blue Jane新加坡12/27绿色Cindy Kuala Lumpur 05/09橙色林旧金山01/17红兰迪柏林10/21黄色

注意,如果排序顺序是升序,则NULLS LAST为默认值,如果排序顺序是降序,则NULLS FIRST为默认值。因为默认排序顺序是升序的,所以不需要同时指定ASC和NULLS LAST。这条线:

按收藏品_color订购;

这行:

ressubly_color asc null上次订购;

是等价的。

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

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

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

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

排序BY Name COLLATE Breton_100_;

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

按名称命令constate breton_100_cs_as;

当然,如果您使用Oracle DB或正在使用MySQL,则不会适用。

顶尖发展课程betwayapp下载安装

2021在Python中完成从零到英雄的Python Bootcamp
何塞Portilla
4.6 (359095)
畅销书
网站开发者训练营2021年
柯尔特斯蒂尔斯
4.7 (202567)
机器学习A-Z™:Data Science的实践Python&R
Kirill Eremenko,Hadelin de Ponteves,SuperdAtcascence支持,Ligency团队
4.5 (144467)
畅销书
软件开发人员的Java编程MasterClass
Tim Buchalka,Tim Buchalka的学习编程学院
4.6 (138018)
畅销书
Angular - 完整指南(2021版)
MaximilianSchwarzmüller.
4.6 (143,297)
畅销书
完整的JavaScript课程2021:从零到专家!
Jonas Schmedtmann.
4.7 (102840)
畅销书

更多的发展betwayapp下载安装课程

使用Transact-SQL的高级排序:OFFSET和FETCH

Transact-SQL还允许您跳过指定数量的记录,并在排序后返回指定数量的记录。偏移参数(以SQL Server 2012开头可用)返回指定的行数后开始的记录。例如,此命令:

ORDER BY Name OFFSET 25行;

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

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

您可以使用偏移量使用fetch参数来指定偏移后返回的记录数。如果要跳过150个记录,则返回下一个35,请使用此命令:

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

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

您可以通过使用一些优秀的课程包括MySQL、Oracle和SQL Server的初级课程和高级课程。

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

SQL中的顶级课程

SQL和PostgreSQL:完整的开发人员指南
Stephen主梁
4.7 (1307)
评价最高
完整的SQL Bootcamp 2021:从零到英雄
何塞Portilla
4.7 (97380)
畅销书
终极MySQL训练营:从SQL初学者到专家
Colt Steele,Ian Schoonover
4.6 (53,306)
畅销书
SQL - 用于数据分析和商业智能的MySQL
365职业
4.6 (27138)
畅销书
完整的SQL和数据库Bootcamp:零掌握[2021]
Andrei Neagoie, Mo Binni
4.6 (1,382)
SQL for初学者:使用MySQL和数据库设计学习SQL
Tim Buchalka的学习编程学院,Jon Avis - SQL教练
4.5 (9339)
SQL & PostgreSQL初学者:成为一个SQL专家
Jon Avis - SQL教练
4.5 (3135)
畅销书
学习高级T-SQL SQL Server管理员
Raphael Asghar.
4.5 (417)
应用SQL的数据分析/数据科学与BigQuery
杰夫·詹姆斯
4.8 (22)
评价最高
SQL用于数据分析 - 使用SQL Server
特拉维斯Cuzick
4.7 (491)
学习SQL初学者到高级级别
Alexander Shafe.
4.8 (24)

更多SQL课程

SQL学生也学习

让你的团队。领导行业。

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

请求一个演示