• SQL系列(五)—— 排序(order by)


    对查询结果进行排序是日常应用开发中最为常见的需求,在SQL中通过order by实现。order by是select语句中一部分,即子句。

    1.order by

    1.1 单列排序

    其实,检索出的数据并不是随机显示的。如果不排序,数据一般将以它在底层表中出现的顺序显示,这有可能是数据最初添加到表中的顺序。但是,如果数据随后进行过更新或删除,那么这个顺序将会受到DBMS重用回收存储空间的方式的影响。

    子句(clause)
    SQL语句由子句构成,有些子句是必需的,有些则是可选的。一个子句通常由一个关键字加上所提供的数据组成。子句的例子有我们在前一
    课看到的SELECT语句的FROM子句。

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

    从以上可以看出:

    • order by是select的子句
    • 可选
    • 可以作用在多个列上

    注意点

    1. ORDER BY子句的位置:
      在指定一条ORDER BY子句时,应该保证它是SELECT语句中最后一条子句。如果它不是最后的子句,将会出现错误消息

    2. 通过非选择列进行排序:
      通常,ORDER BY子句中使用的列将是为显示而选择的列。但是,实际上并不一定要这样,用非检索的列排序数据是完全合法的

    1.2多列排序

    order by不仅可以作用在单列上进行排序,还可以实现对多列排序。要按多个列排序,简单指定列名,列名之间用逗号分开即可(就像选择多个列时那样)。
    排序的优先级:按照order by后面紧随的列依次递减。

    1.3指定排序方向

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

    2实践

    2.1 order by简单使用

    如果不排序的查询,如:

    select * from student;
    

    结果如:

    name age
    lxy 20
    son 1
    wly 18

    如果进行排序:

    select * from student order by age;
    

    结果如:

    name age
    son 1
    wly 18
    lxy 20

    根据age进行了从大到小的排序,即升序排序。

    再来看下排序不检索的列:

    select name from student order by age;
    

    结果如:

    name
    son
    wly
    lxy

    检索出的结果和上面的顺序保持一样。

    2.2多列排序实践

    select * from student;
    

    结果如下:

    name age
    lxy 20
    lxy 10
    lxy 25
    son 1
    wly 18
    wly 16

    如果按照name,age进行排序:

    select * from student order by name, age;
    

    结果如下:

    name age
    lxy 10
    lxy 20
    lxy 25
    son 1
    wly 16
    wly 18

    从以上的两个结果中可以看出优先级。先对结果按照name排序,然后再对相同name的结果,按照age排序。

    2.3指定排序方向

    select * from student order by name;
    select * from student order by name asc;
    

    以上两条查询结果一致:

    name age
    lxy 20
    lxy 10
    lxy 25
    son 1
    wly 18
    wly 16

    如果按照降序排序:

    select * from student order by name desc;
    

    结果如下:

    name age
    wly 18
    wly 16
    son 1
    lxy 20
    lxy 10
    lxy 25
    参考

    《SQL必知必会》

  • 相关阅读:
    大战设计模式【13】—— 组合模式
    大战设计模式【12】—— 迭代器模式
    大战设计模式【11】—— 模板方法模式
    大战设计模式【10】—— 外观模式
    linux命令进阶
    ansible普通用户su切换
    Ansible 进阶技巧
    ansible playbook对错误的处理
    ansible示例,离线安装etcd
    (原)centos7安装和使用greenplum4.3.12(详细版)
  • 原文地址:https://www.cnblogs.com/lxyit/p/9304093.html
Copyright © 2020-2023  润新知