对查询结果进行排序是日常应用开发中最为常见的需求,在SQL中通过order by实现。order by是select语句中一部分,即子句。

1.order by

1.1 单列排序

其实,检索出的数据并不是随机显示的。如果不排序,数据一般将以它在底层表中出现的顺序显示,这有可能是数据最初添加到表中的顺序。但是,如果数据随后进行过更新或删除,那么这个顺序将会受到DBMS重用回收存储空间的方式的影响。

子句(clause)

SQL语句由子句构成,有些子句是必需的,有些则是可选的。一个子句通常由一个关键字加上所提供的数据组成。子句的例子有我们在前一

课看到的SELECT语句的FROM子句。

为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。ORDER BY子句取一个或多个列的名字,据此对输出进行排序。

从以上可以看出:

  • order by是select的子句
  • 可选
  • 可以作用在多个列上

注意点

  1. ORDER BY子句的位置:

    在指定一条ORDER BY子句时,应该保证它是SELECT语句中最后一条子句。如果它不是最后的子句,将会出现错误消息

  2. 通过非选择列进行排序:

    通常,ORDER BY子句中使用的列将是为显示而选择的列。但是,实际上并不一定要这样,用非检索的列排序数据是完全合法的

1.2多列排序

order by不仅可以作用在单列上进行排序,还可以实现对多列排序。要按多个列排序,简单指定列名,列名之间用逗号分开即可(就像选择多个列时那样)。

排序的优先级:按照order by后面紧随的列依次递减。

1.3指定排序方向

数据排序不限于升序排序(从A到Z),这只是默认的排序顺序。还可以使用ORDER BY子句进行降序(从Z到A)排序。为了进行降序排序,必须

指定DESC关键字。默认是升序。

2实践

2.1 order by简单使用

如果不排序的查询,如:

select * from student;

结果如:

name age
lxy 20
son 1
wly 18

如果进行排序:

select * from student order by age;

结果如:

name age
son 1
wly 18
lxy 20

根据age进行了从大到小的排序,即升序排序。

再来看下排序不检索的列:

select name from student order by age;

结果如:

name
son
wly
lxy

检索出的结果和上面的顺序保持一样。

2.2多列排序实践

select * from student;

结果如下:

name age
lxy 20
lxy 10
lxy 25
son 1
wly 18
wly 16

如果按照name,age进行排序:

select * from student order by name, age;

结果如下:

name age
lxy 10
lxy 20
lxy 25
son 1
wly 16
wly 18

从以上的两个结果中可以看出优先级。先对结果按照name排序,然后再对相同name的结果,按照age排序。

2.3指定排序方向

select * from student order by name;
select * from student order by name asc;

以上两条查询结果一致:

name age
lxy 20
lxy 10
lxy 25
son 1
wly 18
wly 16

如果按照降序排序:

select * from student order by name desc;

结果如下:

name age
wly 18
wly 16
son 1
lxy 20
lxy 10
lxy 25
参考

《SQL必知必会》

SQL系列(五)—— 排序(order by)的更多相关文章

  1. PL/SQL第五章 Order by排序

    -- 排序 -- 1.列明排序 -- 2.别名排序 -- 3.列位置排序(当使用union,union all,intersect,minus集合操作,列明不同,但希望排序) SELECT deptn ...

  2. SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型

    原文:SQL Server 2008空间数据应用系列五:数据表中使用空间数据类型 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测 ...

  3. [SQL基础教程] 3-4 对查询结果进行排序/ORDER BY

    [SQL基础教程] 3-4 对查询结果进行排序/ORDER BY ORDER BY SELECT <列名1>,<列名2>,<列名2>... FROM ORDER B ...

  4. MySQL之单表查询 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询

    MySQL之单表查询 阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER B ...

  5. Influx Sql系列教程五:insert 添加数据

    接下来开始进入influxdb的curd篇,首先我们看一下如何添加数据,也就是insert的使用姿势 在进入本篇之前,对于不了解什么是retention policy, tag, field的同学,有 ...

  6. Influx Sql系列教程九:query数据查询基本篇二

    前面一篇介绍了influxdb中基本的查询操作,在结尾处提到了如果我们希望对查询的结果进行分组,排序,分页时,应该怎么操作,接下来我们看一下上面几个场景的支持 在开始本文之前,建议先阅读上篇博文: 1 ...

  7. 不简单的SQL查询和排序语句

    真不简单!! 一:使用select语句进行查询 语法: SELECT    <列名> FROM      <表名> [WHERE    <查询条件表达式>] [OR ...

  8. Influx Sql系列教程八:query数据查询基本篇

    前面几篇介绍了InfluxDB的添加,删除修改数据,接下来进入查询篇,掌握一定的SQL知识对于理解本篇博文有更好的帮助,下面在介绍查询的基础操作的同时,也会给出InfluxSql与SQL之间的一些差别 ...

  9. SQL语句分组排序,多表关联排序

    SQL语句分组排序,多表关联排序总结几种常见的方法: 案例一: 在查询结果中按人数降序排列,若人数相同,则按课程号升序排列? 分析:单个表内的多个字段排序,一般可以直接用逗号分割实现. select ...

随机推荐

  1. 使用脚本安装elasticsearch7.3的记录

    使用脚本安装elasticsearch7.3的记录 #!/bin/sh # https://www.elastic.co/guide/en/elasticsearch/reference/curren ...

  2. NameNode && Secondary NameNode工作机制

    NameNode && Secondary NameNode工作机制 1)工作流程 2)  fsimage和edits NameNode是HDFS的大脑,它维护着整个文件系统的目录树, ...

  3. nginx常用伪静态设置

    nginx里使用伪静态是直接在nginx.conf 中写规则的,并不需要像apache要开启写模块(mod_rewrite)才能进行伪静态. nginx只需要打开nginx.conf配置文件,在ser ...

  4. 解决nginx反向代理webservice的soap:address location问题

    原文:https://blog.csdn.net/mn960mn/article/details/50716768 一:首先来发布一个web service package com.ws.servic ...

  5. debug模式不报错,release模式报错

    经常会 char * pMem = new char[icount]; 其中icount为变量,然后对该内存段猛的操作.release编译出来,出现莫名奇妙的错误.但是debug没问题. 后面查了别人 ...

  6. 自动化测试框架:jmeter + maven+ jenkins

    原理:jenkins驱动maven执行,maven驱动jmeter执行 前提条件:windows安装了jmeter.maven.tomcat.jenkins 安装方法参考汇总目录中对应的博文:http ...

  7. 16-cmake语法-OpeCV3.3.1_CMakeLists.txt的部分注释

    OpeCV3.3.1 的 CMakeLists.txt 的部分注释. # Disable in-source builds to prevent source tree corruption. # @ ...

  8. js面向对象杂谈

    **万丈高楼平地起** 1. 通过命名规范创建具有私有属性的对象: 以__开头的对象为私有对象,但是实际是能访问到的. 2. 通过自执行函数中,return出来一个对象,return旁边的地方都可以写 ...

  9. git blame (10)

    git blame system_server.c 每一行提交的sha ,作者,提交的日期及提交的信息

  10. A Deep Dive into PL/v8

    Back in August, Compose.io announced the addition of JavaScript as an internal language for all new ...