暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OceanBase Cloud快速入门第59期:如何排序查询?

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/


ORDER BY 子句用于对查询结果按照一个或多个属性列进行升序(ASC)或降序(DESC)排列,默认为升序。

排序查询语法

ORDER BY 支持单字段排序、多字段排序、按别名排序和按函数排序,多字段排序之间用逗号隔开。排序查询的 SQL 语句格式如下:

SELECT select_list FROM table_list 
[WHERE query_condition] 
ORDER BY column_name [ASC|DESC] [,column_name [ASC|DESC]...];
复制

进行排序查询时,使用如果不添加 ASC 或 DESC 关键字,则默认查询结果为升序排列。

排序查询示例

单字段排序查询

  • 按照 deptno 升序显示员工信息。

    obclient> SELECT empname, deptno FROM emp ORDER BY deptno;
    +---------+--------+
    | empname | deptno |
    +---------+--------+
    | SMITH   |     20 |
    | SCOTT   |     20 |
    | ALLEN   |     30 |
    | BLAKE   |     30 |
    | JONES   |     40 |
    | FORD    |     40 |
    +---------+--------+
    6 rows in set
    
    复制
  • 按照 deptno 降序显示员工信息。

    obclient> SELECT empname, deptno FROM emp ORDER BY deptno DESC;
    +---------+--------+
    | empname | deptno |
    +---------+--------+
    | JONES   |     40 |
    | FORD    |     40 |
    | ALLEN   |     30 |
    | BLAKE   |     30 |
    | SMITH   |     20 |
    | SCOTT   |     20 |
    +---------+--------+
    6 rows in set
    
    复制

多字段排序查询

按照 deptno 升序、sal 降序显示员工信息。

obclient> SELECT empname, deptno, sal FROM emp ORDER BY deptno ASC, sal DESC;
+---------+--------+---------+
| empname | deptno | sal     |
+---------+--------+---------+
| SCOTT   |     20 | 3000.00 |
| SMITH   |     20 |  800.00 |
| BLAKE   |     30 | 2850.00 |
| ALLEN   |     30 | 1600.00 |
| FORD    |     40 | 3000.00 |
| JONES   |     40 | 2975.00 |
+---------+--------+---------+
6 rows in set
复制

按别名排序查询

为查询列 empnamedeptnosal 设置别名,并按照别名 部门编号 升序、薪酬 降序显示员工信息。

obclient> SELECT empname '员工姓名', deptno '部门编号', sal '薪酬' FROM emp ORDER BY '部门编号' ASC,'薪酬' DESC;
+--------------+--------------+---------+
| 员工姓名      | 部门编号     | 薪酬     |
+--------------+--------------+---------+
| SCOTT        |           20 | 3000.00 |
| SMITH        |           20 |  800.00 |
| BLAKE        |           30 | 2850.00 |
| ALLEN        |           30 | 1600.00 |
| FORD         |           40 | 3000.00 |
| JONES        |           40 | 2975.00 |
+--------------+--------------+---------+
6 rows in set
复制

按函数排序查询

如下示例在 ORDER BY 中使用了函数排序。其中 YEAR() 属于日期函数,可以获取对应日期中的年份。

示例:

  • 按照 deptno 升序,YEAR(hiredate) 的函数结果降序显示员工信息。

    obclient> SELECT empname, deptno, YEAR(hiredate) FROM emp ORDER BY deptno ASC, YEAR(hiredate) DESC;
    +---------+--------+----------------+
    | empname | deptno | YEAR(hiredate) |
    +---------+--------+----------------+
    | SCOTT   |     20 |           1987 |
    | SMITH   |     20 |           1980 |
    | ALLEN   |     30 |           1981 |
    | BLAKE   |     30 |           1981 |
    | JONES   |     40 |           1981 |
    | FORD    |     40 |           1981 |
    +---------+--------+----------------+
    6 rows in set
    
    复制

    示例在 ORDER BY 中使用了别名排序。其中 YEAR() 属于日期函数,可以获取对应日期中的年份。

  • 为查询列 empnamedeptno 和 YEAR (hiredate) 设置别名,并按照 deptno 升序和别名 出生日期 降序显示员工信息。

    obclient> SELECT empname '员工姓名', deptno '部门编号',YEAR (hiredate) '出生日期' FROM emp ORDER BY deptno ASC, '出生日期' DESC;
    +--------------+--------------+--------------+
    | 员工姓名     | 部门编号     | 出生日期     |
    +--------------+--------------+--------------+
    | SCOTT        |           20 |         1987 |
    | SMITH        |           20 |         1980 |
    | ALLEN        |           30 |         1981 |
    | BLAKE        |           30 |         1981 |
    | JONES        |           40 |         1981 |
    | FORD         |           40 |         1981 |
    +--------------+--------------+--------------+
    6 rows in set
    
    复制

在 WHERE 子句之后排序

使用 WHERE 子句可以在排序前对数据进行筛选。

obclient> SELECT empname, deptno, sal, YEAR(hiredate) FROM emp WHERE sal >= 1000 ORDER BY YEAR(hiredate);
+---------+--------+---------+----------------+
| empname | deptno | sal     | YEAR(hiredate) |
+---------+--------+---------+----------------+
| ALLEN   |     30 | 1600.00 |           1981 |
| JONES   |     40 | 2975.00 |           1981 |
| BLAKE   |     30 | 2850.00 |           1981 |
| FORD    |     40 | 3000.00 |           1981 |
| SCOTT   |     20 | 3000.00 |           1987 |
+---------+--------+---------+----------------+
5 rows in set
复制


欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论