5、ORDER BY:对查询结果排序
通过条件查询语句可以查询到符合用户需求的数据,但是查询到的数据一般都是按照数据最初被添加到表中的顺序来显示。为了使查询结果的顺序满足用户的要求,MySQL 提供了 ORDER BY 关键字来对查询结果进行排序。
在实际应用中经常需要对查询结果进行排序,比如,在网上购物时,可以将商品按照价格进行排序;在医院的挂号系统中,可以按照挂号的先后顺序进行排序等。
ORDER BY 关键字主要用来将查询结果中的数据按照一定的顺序进行排序。其语法格式如下:
ORDER BY <字段名> [ASC|DESC]
语法说明如下。
- 字段名:表示需要排序的字段名称,多个字段时用逗号隔开。
- ASC|DESC:ASC表示字段按升序排序;DESC表示字段按降序排序。其中ASC为默认值。
使用 ORDER BY 关键字应该注意以下几个方面:
- ORDER BY 关键字后可以跟子查询
- 当排序的字段中存在空值时,ORDER BY 会将该空值作为最小值来对待。
- ORDER BY 指定多个字段进行排序时,MySQL 会按照字段的顺序从左到右依次进行排序。
单字段排序
下面通过一个具体的实例来说明当 ORDER BY 指定单个字段时,MySQL 如何对查询结果进行排序。
例 1
下面查询 tb_students_info 表的所有记录,并对 height 字段进行排序,SQL 语句和运行结果如下。
mysql> SELECT * FROM tb_students_info ORDER BY height;
+----+--------+---------+------+------+--------+------------+
| id | name | dept_id | age | sex | height | login_date |
+----+--------+---------+------+------+--------+------------+
| 2 | Green | 3 | 23 | F | 158 | 2016-10-22 |
| 1 | Dany | 1 | 25 | F | 160 | 2015-09-10 |
| 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 |
| 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 |
| 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 |
| 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 |
| 6 | John | 2 | 21 | M | 172 | 2015-11-11 |
| 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 |
| 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 |
| 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 |
+----+--------+---------+------+------+--------+------------+
由结果可以看到,MySQL 对查询的 height 字段的数据按数值的大小进行了升序排序。
多字段排序
下面通过一个具体的实例来说明当 ORDER BY 指定多个字段时,MySQL 如何对查询结果进行排序。
例 2
查询 tb_students_info 表中的 name 和 height 字段,先按 height 排序,再按 name 排序,SQL 语句和运行结果如下。
mysql> SELECT name,height FROM tb_students_info ORDER BY height,name;
+--------+--------+
| name | height |
+--------+--------+
| Green | 158 |
| Dany | 160 |
| Jane | 162 |
| Lily | 165 |
| Tom | 165 |
| Susan | 170 |
| John | 172 |
| Jim | 175 |
| Thomas | 178 |
| Henry | 185 |
+--------+--------+
注意:在对多个字段进行排序时,排序的第一个字段必须有相同的值,才会对第二个字段进行排序。如果第一个字段数据中所有的值都是唯一的,MySQL 将不再对第二个字段进行排序。
默认情况下,查询数据按字母升序进行排序(A~Z),但数据的排序并不仅限于此,还可以使用 ORDER BY 中的 DESC 对查询结果进行降序排序(Z~A)。
例 3
查询 tb_students_info 表,先按 height 降序排序,再按 name 升序排序,SQL 语句和运行结果如下。
mysql> SELECT name,height FROM tb_student_info ORDER BY height DESC,name ASC;
+--------+--------+
| name | height |
+--------+--------+
| Henry | 185 |
| Thomas | 178 |
| Jim | 175 |
| John | 172 |
| Susan | 170 |
| Lily | 165 |
| Tom | 165 |
| Jane | 162 |
| Dany | 160 |
| Green | 158 |
+--------+--------+
DESC 关键字只对前面的列进行降序排列,在这里只对 height 字段进行降序。因此,height 按降序排序,而 name 仍按升序排序。如果想在多个列上进行降序排序,必须对每个列指定 DESC 关键字。
5、ORDER BY:对查询结果排序相关推荐
- mysql 5.7.15 union order by 子查询排序不生效
其实这么写理论上是对的,很多博客教程都是这样子写的.. select * from (SELECT * FROM article WHERE is_top=0 ORDER BY id DESC) as ...
- MYSQL数据库(十)- 数据表的插入(insert)、删(delete)、改(update)、查(select)、group by 分组、having语句设置分组条件,order by查询结果排序,
目录结构 本章目录 一.插入insert: 方法一:insert标准插入数据写法 方法二:set插入数据写法 方法三:请看本章最后一个案例 二.插入update: 方法一:单表更新记录 方法二:多表更 ...
- c mysql 分页,MySQL查询之排序分页
1.排序order by的基本用法 在MySQL中排序的基本语法如下所示 # 单字段 SELECT column1, column2 from table order by column1 desc; ...
- MySQL对查询结果排序
从表中查询出来的数据,可能是无序的,或者其排列顺序表示用户期望的 使用ORDER BY对查询结果进行排序 SELECT 字段名1,字段名2,-- FROM 表名 ORDER BY 字段名1 [ASC| ...
- oracle 条件查询加排序,Java乔晓松-oracle的条件查询和排序查询
在查询中过滤行 过滤 使用 WHERE 子句,将不满足条件的行过滤掉. SELECT *|{[DISTINCT] column|expression [alias],...} FROM tabl ...
- SQL Cookbook:二、查询结果排序(1)以指定的次序返回查询结果
问题 显示部门10中员工的名字.职位和工资,并按照工资的升序排列.结果集如下所示: ENAME JOB SAL ---------- --------- ---------- MILLER ...
- oracle 查询结果升序,Oracle学习日志-8(查询结果排序)
要用到的表如下 书上写到,上面的查询结果排序是随机的,再执行几次结果可能不同,但是我执行多次后,查询结果的排序都是如此,是因为oracle的默认处理方式是按照物理储存顺序查询的,而我在插入记录的时候都 ...
- SQL数据库语言基础之SqlServer条件查询、排序数据表、like模糊查询【大总结】
文章目录 一.语句查询数据(SELECT) 二.获取满足查询条件的语句(WHERE) 三.排序查询(ORDER BY) 四.高级条件查询 一.语句查询数据(SELECT) 1.在SSMS中查看数据 在 ...
- Task02:SQL基础查询与排序-天池龙珠计划SQL训练营
Task02:SQL基础查询与排序 一.SELECT语句基础 1.1 从表中选取数据 SELECT语句 1.2从表中选取符合条件的数据 WHERE语句 1.3 相关法则 星号(*)代表全部列的意思. ...
最新文章
- 销售科目确认相关配置
- 失眠害死人-jQueryAJAX
- python选择日期控件_Flask学习笔记-使用bootstrap-datepicker实现页面日期选择
- 命名规范(1)大小写约定
- about-ie下模拟input file上传功能失效
- 8-2:C++继承之父类和子类对象赋值转换(公有继承)也即切片
- php命令行用法简介
- linux配置libpng环境变量_不同操作系统下 jdk 的配置
- msgget();msgsnd();msgrcv();msgctl(); 消息队列 Linux进程间的通信方式之消息队列
- 065_VFPage中CallBack回调函数的解释
- Opengl_19_assimp_1
- ES 经纬度距离 php,php 根据两点的经纬度计算距离
- Calendar 用法
- 【java毕业设计】基于java+Socket+Eclipse的坦克大战游戏设计与实现(毕业论文+程序源码)——坦克大战游戏
- 位移运算(左移,右移)
- 2021年CFA最新学习资料!
- # vue+JavaScript实现slideDown与slideUp效果
- 常熟理工php实验三_常熟理工学院新闻网
- pytorch Glove 下载到使用
- 互动百科变快懂百科,纳入字节抖音旗下后要爆发了?
热门文章
- DayDayUp:本博主预计2019下半年将会出两本书(关于人工智能算法及其实战案例应用方向、计算机算法竞赛集锦方向),如有合作意向,请留言告知
- 9.2 mnist_with_summaries tensorboard 可视化展示
- errno_t open_s()打开文件出现的错误分析
- cnpm与npm指定有什么区别?
- docker-elk装IK自定义分词库
- 【BZOJ4820】[SDOI2017]硬币游戏(高斯消元)
- mac 下idea光标问题
- 开源物联网通讯框架ServerSuperIO,成功移植到Windows10 IOT,在物联网和集成系统建设中降低成本。附:“物联网”交流大纲...
- Android开发之在程序右上角添加菜单选项
- 第七章 综合练习 第四题