MySQL 学习笔记 —— 3、排序检索数据

检索数据 中,主要讲了 SELECT 的基本检索功能


排序数据

使用 SELECT 检索的数据返回时,并没有特定的顺序

如果不排序,数据一般将以它在底层表中出现的顺序显示,这有可能是数据最初添加到表中的数据

但是如果数据之后进行过更新或删除,那么这个顺序就会收到 DBMS 重用回收存储空间的方式的影响


子句(clause)

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

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

可以看如下两个语句的比较

SELECT prod_name FROM Products;
SELECT prod_name FROM Products ORDER BY prod_name;

ORDER BY 子句指示 DBMS 对 prod_name 列以字母顺序排序

图1

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

通常,ORDER BY 子句中使用的列是为显示而选择的列,但是也可以使用非检索的列排序数据


按多个列排序

经常需要按不止一个列进行数据排序。例如,如果要显示雇员名单,可能希望按照姓和名排序(首先需要按照姓排序,然后在每个姓中,再按照名排序)。如果雇员具有相同的姓,这样做就很有用

要按照多个列排序,简单指定列名,列名之间用逗号分开即可(就想选择多个列时那样)

SELECT prod_id, prod_price, prod_name 
FROM Products ORDER BY prod_price, prod_name;

tu2

如上代码,检索三个列,并按照其中两个列对结果进行排序——先按照价格,再按照名称

仅在多行具有相同价格时,才按照产品名排序;如果价格唯一,则不会按照产品名排序


按列位置排序

ORDER BY 还支持按相对列位置进行排序

SELECT prod_id, prod_price, prod_name 
FROM Products ORDER BY 2,3;

图3

这个输出与上一个输出相同的,不同之处在于 ORDER BY 子句

SELECT 清单中指定的是选择列的相对位置而不是列名

ORDER BY 2 表示按照 SELECT 清单中的第二个列 prod_price 进行排序

而 ORDER BY 2, 3 则表示先按照 prod_price ,再按照 prod_name 进行排序

好处是:
不用重新输入列名
缺点是:
1、不明确给出列名,可能导致错用列名排序
2、在对 SELECT 清单进行更改时,容易错误地对数据进行排序(忘记对ORDER BY 子句做相应地改动)
3、如果进行排序的列不在清单内,则不能使用这个用法

如果有必要,实际中可以混用两种方式


指定排序方向

数据排序不限于升序排序(从A 到 Z),这只是默认的排序顺序
还可以使用 ORDER BY 子句进行降序(从Z 到 A)排序,需要指定 DESC 关键字

仍然可以用多个列进行排序,但是 DESC 关键字只会应用到直接位于其前面的列名

如果想要在多个列上进行降序排序,则必须对每一列指定 DESC 关键字

如下面第二个语句中,prod_price 列以降序排序
而 prod_name 列(每个价格内)仍然按照标准的升序排序

SELECT prod_id, prod_price, prod_name 
FROM Products ORDER BY prod_price DESC;
SELECT prod_id, prod_price, prod_name 
FROM Products ORDER BY prod_price DESC, prod_name;

图3

图4
DESCDESCENDING 的缩写,这两个关键字都可以使用
DESC 相对的是 ASC(ASCENDING),在升序排序时可以指定
不过默认排序时升序,所以通常不需要使用 ASC

在字典排序顺序中,A被认为与a相同,这也是大多数数据库管理系统的默认行为,如果需要改变,需要借助数据库管理的帮助,而不能只通过ORDER BY 子句实现

使用 ORDER BYLIMIT 的组合,能够找到一个列中最高或者最低的值

mysql> SELECT prod_price FROM products
    -> ORDER BY prod_price DESC
    -> LIMIT 1;

图图图

使用 LIMIT ,必须位于 ORDER BY 之后

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值