相关推荐recommended
SQL Sever 基础知识 - 数据排序
作者:mmseoamin日期:2024-04-30

SQL Sever 基础知识 - 二 、数据排序

  • 二 、对数据进行排序
    • 第1节 ORDER BY 子句简介
    • 第2节 ORDER BY 子句示例
      • 2.1 按一列升序对结果集进行排序
      • 2.2 按一列降序对结果集进行排序
      • 2.3 按多列对结果集排序
      • 2.4 按多列对结果集不同排序
      • 2.5 按不在选择列表中的列对结果集进行排序
      • 2.6 按表达式对结果集排序
      • 2.7 按列的顺序位置排序

        更多SQL Sever基础知识可查看:SQL Sever 基础知识(全)

        特别说明:

          本文章所用的所有数据库、数据表及其数据皆为AI随机生成,不涉及个人隐私,且仅供学习使用!

        二 、对数据进行排序

        按一列或多列对查询的结果集进行排序。

        第1节 ORDER BY 子句简介

        使用 SELECT 语句从表中查询数据时,结果集中的行的顺序不能保证。说明SQL Server可以返回具有未指定行顺序的结果集,确保结果集中的行已排序的唯一方法是使用 ORDER BY 子句

        以下说明 ORDER BY 子句语法:

         select <列名1>,<列名2>,...
         from [表名]
         order by <列名> [ASC|DESC]; --asc升序排序(默认,可省略);desc降序排序
        

        order by指定一个列名或表达式,根据该列名或表达式对查询的结果集进行排序。如果指定多列,则结果集按第一列排序,然后按第二列排序该排序结果集,依此类推。

        出现在order by子句中的列必须对应于选择列表中的列或在 form 子句中指定的表中定义的列。

        使用 ASC 或 DESC 指定指定列中的值是否应按升序或降序排序。如果没有显式指定 ASC 或 DESC ,将使用 ASC 作为默认排序顺序。

        此外,SQL Server将NULL视为最小值。

        第2节 ORDER BY 子句示例

        2.1 按一列升序对结果集进行排序

        查询ZCustomers表中所有客户姓名,并升序排序:

         select cust_name 
         from ZCustomers
         order by cust_name
        

        没有指定 ASC 或 DESC ,所以 ORDER BY 子句默认使用 ASC 。

        执行结果:

        SQL Sever 基础知识 - 数据排序,在这里插入图片描述,第1张

        2.2 按一列降序对结果集进行排序

        查询ZCustomers表中所有客户姓名,并降序排序:

         select cust_name 
         from ZCustomers
         order by cust_name desc
        

        执行结果:

        SQL Sever 基础知识 - 数据排序,在这里插入图片描述,第2张

        2.3 按多列对结果集排序

        查询ZCustomers表中所有客户的名字和城市。它先按城市然后按名字对客户列表进行排序:

         select cust_city,cust_name,cust_address
         from ZCustomers
         order by cust_city,cust_name
        

        执行结果:

        SQL Sever 基础知识 - 数据排序,在这里插入图片描述,第3张

        2.4 按多列对结果集不同排序

        查询ZCustomers表中所有客户的名字和城市。它先按城市升序然后按名字降序对客户列表进行排序:

         select cust_city,cust_name,cust_address
         from ZCustomers
         order by cust_city,cust_name desc
        

        执行结果:

        SQL Sever 基础知识 - 数据排序,在这里插入图片描述,第4张

        2.5 按不在选择列表中的列对结果集进行排序

        可以按未出现在选择列表中的列对结果集进行排序。查询ZCustomers表中所有客户的名字和城市,对cust_zip升序排列:

         select cust_city,cust_name,cust_address
         from ZCustomers
         order by cust_zip
        

        执行结果:

        SQL Sever 基础知识 - 数据排序,在这里插入图片描述,第5张

        Note:

        order by后列是在表中有定义的;如果未定义,则查询无效。

        2.6 按表达式对结果集排序

        用到一个LEN( )函数,LEN( )函数的作用是:返回字符串中的字符数。

        以下语句使用 ORDER BY 子句中的 LEN( ) 函数检索按名字长度排序的客户列表:

         select cust_city,cust_name,cust_address
         from ZCustomers
         order by len(cust_name)
        

        执行结果:

        SQL Sever 基础知识 - 数据排序,在这里插入图片描述,第6张

        2.7 按列的顺序位置排序

        SQLServer允许根据选择列表中出现的列的序号位置对结果集进行排序。

        查询ZCustomers表中所有客户的名字和城市。它先按城市升序然后按名字降序对客户列表进行排序:

         select cust_city,cust_name,cust_address
         from ZCustomers
         order by 1 ,2 desc
        

        执行结果:

        SQL Sever 基础知识 - 数据排序,在这里插入图片描述,第7张

        在此示例中,1表示 cust_city列,2表示 cust_name列。

        不推荐 在 ORDER BY 子句中使用列的顺序位置排序,原因有两个:

        ①表中的列没有顺序位置,需要通过名称引用。

        ②当修改选择列表后可能会忘记在 ORDER BY 子句中进行相应的更改。

        因此,最好始终在 ORDER BY 子句中显式指定列名。