• 第5章 排序检索数据
    • 一、排序数据
    • 二、按多个列排序
    • 三、指定排序方向

    第5章 排序检索数据

    1. 排序数据
    2. 按多个列排序
    3. 指定排序方向

      

    一、排序数据

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

    子句:SQL语句由子句构成,有些子句是必需的,而有的是可选的。一个子句通常由一个关键字和所提供的数据组成。子句的例子有select语句的from子句。

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

    1. select prod_name form products order by prod_name;
      通常,order by子句中使用的列将是为显示所选择的列。但是,实际上并不一定要这样,用非检索的列排序数据是完全合法的。

      

    二、按多个列排序

      首先按价格,然后再按名称排序:

    1. select prod_id, prod_price, prod_name
    2. from products
    3. order by prod_price, prod_name;

      仅在多个行具有prod_price值时才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序。

      

    三、指定排序方向

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

    1. select prod_id, prod_price, prod_name
    2. from products
    3. order by prod_price desc;

      但是,如果打算用多个列排序怎么办?以降序排序产品(最贵的在最前面),然后再对产品名排序:

    1. select prod_id, prod_price, prod_name
    2. from products
    3. order by prod_price desc, prod_name;

      desc关键字只应用到直接位于其前面的列名。

    注意:在字典排序顺序中,A被视为与a相同,这是MySQL的默认行为。用order by子句做不到。许多数据库管理员可以改变这种规则。

      使用order by和limit组合,找出列中最高或最低的值。

    1. select prod_price
    2. from products
    3. order by prod_price desc
    4. limit 1;
    注意:子句的顺序。

      

    ?