MYSQL必知必会笔记:第五章排序检索数据


本章讲select语句的order by 字句

5.1

检索出的数据并不是以纯粹的随机显示的,如果不排序,数据将以它在底层出现的顺序排序。如果数据后面进行过更新或者删除,可能会受到MySql重用回收存储空间的影响。关系型数据库设计理论任务,如果不明确规定排序,则不应该假定检索出的数据的顺序有意义

5.2子句

  1. SQL语句由子句构成,有的是必须的有的是可选的。一个句子通常由一个关键字和所提供的数据组成。子句例子有SELECT语句的FROM子句

  2. 为了明确地排序用SELECT语句检索出的数据,可使用ORDER BY子句。

    • 可使用ORDER BY子句取一个或者多个列的名字,据此对输出进行排序

输入:

select bookid
from BookInfo;

输出:

+-----------+
| bookid    |
+-----------+
| 7800-7336 |
| 7564-1018 |
| 7800-8287 |
| 9787-5057 |
| 9787-5378 |
| 9787-5613 |
| 9787-8020 |
| 1008-2352 |
| 7111-1790 |
| 7305-0458 |
+-----------+
10 rows in set (0.00 sec)

输入:

select bookid 
from BookInfo 
order by bookid;

输出:

+-----------+
| bookid    |
+-----------+
| 1008-2352 |
| 7111-1790 |
| 7305-0458 |
| 7564-1018 |
| 7800-7336 |
| 7800-8287 |
| 9787-5057 |
| 9787-5378 |
| 9787-5613 |
| 9787-8020 |
+-----------+
10 rows in set (0.00 sec)

这条语句除了指示MySql对bookid列以顺序排序数据的order by子句外,与前面的语句相同

通常,使用order by子句中使用的列将是为显示所选择的列,但是并非一定需要这样。

5.3按多个列进行排序

为了按多个列排序,只需要指定列名,列名直接使用逗号分开即可

下面的语句先按书名排序 再按作者排序

输入

 select bookid,bookname,author 
 from BookInfo 
 order by bookname,author;

输出

+-----------+-----------------------+------------------+
| bookid    | bookname              | author           |
+-----------+-----------------------+------------------+
| 7111-1790 | Java2核心技术         | Gray Comel       |
| 7800-8287 | 倾城之恋              | 莫然             |
| 7564-1018 | 大学语文教程          | 董自厚           |
| 9787-5613 | 沉睡之城111           | 蔡骏             |
| 9787-8020 | 爱丽丝漫游奇境        | 卡罗尔           |
| 1008-2352 | 电脑乐园              | 谭宇             |
| 9787-5057 | 盗墓笔记              | 南派三叔         |
| 7305-0458 | 计算机应用基础        | 黄强             |
| 7800-7336 | 谁动了我的奶酪        | 斯宾塞.约翰      |
| 9787-5378 | 韩寒作品集            | 韩寒             |
+-----------+-----------------------+------------------+
10 rows in set (0.00 sec)

多个排序时,完全安装规定的顺序进行排序,对于上面的例子输出中,如果bookname列有相同的,则按author对相同的bookname进行排序。

5.3指定排序方向

降序

通过降序排序,必须指定DESC关键字

格式

select 列名
from 表名
order by 列名 DESC;

下面例子按照价格降序

select *
from products 
order by prod_price desc;

如果使用降序的时候打算用多个列排序则使用逗号分割开(最贵的在前面)

select * 
from products 
order by prod_price desc,prod_name;

分析:DESC 关键字只应用到直接位于其前面的列名,因此上列中不会对prod_name进行降序排序

注意:如果你想要也prod_name也同时进行降序则必须参考如下

select * 
from products
order by prod_price desc,prod_name desc;

分析:对每个列都指定DESC关键字

升序

与desc关键字想反的是ASC,在升序排序的时候指定,默认是升序的格式与使用desc一致

order by+limit

使用order by+和limit组合,找出一个列中最高或者最低的值:

select * 
from products
order by prod_price desc
limit 1;

order by子句的位置

在给出order by 子句时,应该保证位于from子句后,如果使用limit,必须位于order bv之后。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tree_Root.

大佬给点饭吃

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值