mysql必知必会--排序检索数据

排序数据

其实,检索出的数据并非以纯粹的随机顺序显示的。若是不排
序,数据通常将以它在底层表中出现的顺序显示。这能够是数据最初
添加到表中的顺序。可是,若是数据后来进行过更新或删除,则此顺
序将会受到MySQL重用回收存储空间的影响。所以,若是不明确控
制的话,不能(也不该该)依赖该排序顺序。关系数据库设计理论认
为,若是不明确规定排序顺序,则不该该假定检索出的数据的顺序有
意义。数据库

子句(clause) SQL语句由子句构成,有些子句是必需的,而
有的是可选的。一个子句一般由一个关键字和所提供的数据组
成。子句的例子有 SELECT 语句的 FROM 子句数据库设计

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

经过非选择列进行排序 一般, ORDER BY 子句中使用的列将
是为显示所选择的列。可是,实际上并不必定要这样,用非
检索的列排序数据是彻底合法的设计

按多个列排序

常常须要按不止一个列进行数据排序。例如,若是要显示雇员清单,
可能但愿按姓和名排序(首先按姓排序,而后在每一个姓中再按名排序)。
若是多个雇员具备相同的姓,这样作颇有用。
为了按多个列排序,只要指定列名,列名之间用逗号分开便可(就
像选择多个列时所作的那样)。
重要的是理解在按多个列排序时,排序彻底按所规定的顺序进行。3d

指定排序方向

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

可是,若是打算用多个列排序怎么办?下面的例子以降序排序产品
(最贵的在最前面),而后再对产品名排序
排序

DESC 关键字只应用到直接位于其前面的列名。在上例中,只对
prod_price 列指定 DESC ,对 prod_name 列不指定。所以,
prod_price 列以降序排序,而 prod_name 列(在每一个价格内)仍然按标准
的升序排序。产品

在多个列上降序排序 若是想在多个列上进行降序排序,必须
对每一个列指定 DESC 关键字
与 DESC 相反的关键字是 ASC ( ASCENDING ),在升序排序时能够指定它。
但实际上, ASC 没有多大用处,由于升序是默认的(若是既不指定 ASC 也
不指定 DESC ,则假定为 ASC )io

区分大小写和排序顺序 在对文本性的数据进行排序时,A与
a相同吗?a位于B以前仍是位于Z以后?这些问题不是理论问
题,其答案取决于数据库如何设置。
在字典(dictionary)排序顺序中,A被视为与a相同,这是MySQL
(和大多数数据库管理系统)的默认行为。可是,许多数据库
管理员可以在须要时改变这种行为(若是你的数据库包含大量
外语字符,可能必须这样作)。
这里,关键的问题是,若是确实须要改变这种排序顺序,用简
单的 ORDER BY 子句作不到。你必须请求数据库管理员的帮助请求

使用 ORDER BY 和 LIMIT 的组合,可以找出一个列中最高或最低的值。
下面的例子演示如何找出最昂贵物品的值:

prod_price DESC 保证行是按照由最昂贵到最便宜检索的,而
LIMIT 1 告诉MySQL仅返回一行。

ORDER BY 子句的位置 在给出 ORDER BY 子句时,应该保证它
位于 FROM 子句以后。若是使用 LIMIT ,它必须位于 ORDER BY

本章学习了如何用 SELECT 语句的 ORDER BY 子句对检索出的数据进行 排序。这个子句必须是 SELECT 语句中的最后一条子句。可根据须要,利 用它在一个或多个列上对数据进行排序 以后。使用子句的次序不对将产生错误消息

相关文章
相关标签/搜索