美文网首页
_3_ SQL 排序数据(ORDER BY)

_3_ SQL 排序数据(ORDER BY)

作者: changsanjiang | 来源:发表于2018-06-20 15:51 被阅读23次

    本文DEMO

    https://gitee.com/changsanjiang/SQLDemo/tree/master

    排序数据

    正如前面我们使用的SQL语句, 下面的输入返回某个表的单个列. 但请看输出, 并没有特定的顺序.

    SELECT prod_name
    FROM Products;
    
    image.png

    其实, 检索出的数据并不是随机显示的. 如果不排序, 数据一般将以它在底层表中出现的顺序显示, 这有可能是数据最初添加到表中的顺序. 但是如果数据随后进行过更新或删除, 那么这个顺序将会受到DBMS重用回收存储空间的方式的影响. 因此, 如果不明确控制的话, 则最终的结果不能(也不应该)依赖该排序顺序.

    关系数据库设计理论认为, 如果不明确规定排序顺序, 则不应该假定检索出来的数据, 它的顺序有什么意义.

    **子句**
    SQL语句由子句构成. 有些子句是必须的, 有些则是可选的. 
    一个子句通常由一个关键字加上所提供的数据组成. 例如 FROM Products.
    

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

    SELECT prod_name
    FROM Products
    ORDER BY prod_name;
    

    分析:

    这条语句, 其中除了指示DBMS对prod_name列以字母顺序排序数据外(ORDER BY prod_name), 剩余与前面学过的相同.

    输出:

    image.png
    **注意: ORDER BY 子句的位置**
    在指定一条 ORDER BY 子句时, 应该保证它是 SELECT 语句中最后一条子句. 如果它不是最后的子句, 将会出现错误消息.
    
    提示: 通过非选择列进行排序
    实际上, 也可以使用非选择的列进行排序, 这也是合法的.
    

    按多个列排序

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

    如下, 检索3个列, 并按其中两个列对结果进行排序 -- 首先按价格, 然后按名称排序

    输入:

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

    输出:

    image.png

    分析:

    可以看到, 这里与上面不同之处在于 ORDER BY 子句. ORDER BY 2 表示按 SELECT 清单中的第二个列 prod_price 进行排序. ORDER BY 2, 3 表示先按照 prod_price, 在按 prod_name 进行排序.

    这一技术的好处在于不用重新输入列名. 但它也有缺点. 首先, 不明确给出列名有可能错用列名. 其次, 在对 SELECT 清单进行更改时容易错误地对数据进行排序.


    指定排序方向

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

    输入:

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

    输出:

    image.png

    多个列上降序排序:

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

    输出:

    image.png
    **提示: 区分大小写和排序顺序**
    在对文本性数据进行排序时, A 与 a 相同吗? a 位于 B 之前, 还是 Z 之后? 
    这些问题不是理论问题, 其答案取决于数据库的设置方式.
    

    相关文章

      网友评论

          本文标题:_3_ SQL 排序数据(ORDER BY)

          本文链接:https://www.haomeiwen.com/subject/rthxyftx.html