如何使用SQL ORDER BY子句按升序或降序进行排序
2022/1/19 19:23:15
本文主要是介绍如何使用SQL ORDER BY子句按升序或降序进行排序,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本教程将演示如何使用SQL ORDER BY
子句根据指定的标准按升序或降序对结果集进行排序。
1. SQL ORDER BY子句简介
当使用SELECT
语句查询表中的数据时,结果集中显示的行的顺序可能与您的预期不符。
在某些情况下,结果集中显示的行按其物理存储在表中的顺序排列。 但是,如果查询优化器使用索引来处理查询,则行记录将显示为它们以索引键顺序存储。 因此,结果集中的行顺序未确定或不可预测。
查询优化器是数据库系统中的内置软件组件,用于确定SQL语句查询请求数据的最有效方式。
要准确指定结果集中的行顺序,请在SELECT
语句中添加使用ORDER BY
子句,如下所示:
SELECT column1, column2 FROM table_name ORDER BY column1 ASC , column2 DESC;
在此语法中,ORDER BY
子句放在FROM
子句之后。 如果SELECT
语句包含WHERE
子句,则ORDER BY
子句必须放在WHERE子句之后。
更多教程请访问 http://www.manongzj.com
要对结果集进行排序,请指定要排序的列以及排序顺序的类型:
- 升序(使用:
ASC
表示) - 降序(使用:
DESC
表示)
如果未指定排序顺序,则数据库系统通常默认按升序(ASC
)对结果集进行排序。
当在ORDER BY
子句中包含多个列时,数据库系统首先根据第一列对结果集进行排序,然后根据第二列对排序的结果集进行排序,依此类推。
2. SQL ORDER BY子句示例
我们将使用示例数据库中的employees
表进行演示。
SELECT employee_id, first_name, last_name, hire_date, salary FROM employees;
执行上面查询语句,得到以下结果 -
+-------------+------------+-----------+------------+--------+ | employee_id | first_name | last_name | hire_date | salary | +-------------+------------+-----------+------------+--------+ | 100 | Steven | Lee | 1987-06-17 | 24000 | | 101 | Neena | Wong | 1989-09-21 | 17000 | | 102 | Lex | Liang | 1993-01-13 | 17000 | | 103 | Alexander | Lee | 1990-01-03 | 9000 | | 104 | Bruce | Wong | 1991-05-21 | 6000 | | 105 | David | Liang | 1997-06-25 | 4800 | | 106 | Valli | Chen | 1998-02-05 | 4800 | | 107 | Diana | Chen | 1999-02-07 | 4200 | ... ... | 200 | Jennifer | Zhao | 1987-09-17 | 4400 | | 201 | Michael | Zhou | 1996-02-17 | 13000 | | 202 | Pat | Zhou | 1997-08-17 | 6000 | | 203 | Susan | Zhou | 1994-06-07 | 6500 | | 204 | Hermann | Wu | 1994-06-07 | 10000 | | 205 | Shelley | Wu | 1994-06-07 | 12000 | | 206 | William | Wu | 1994-06-07 | 8300 | +-------------+------------+-----------+------------+--------+ 40 rows in set
似乎行记录显示为存储在employees
表中顺序。 要按字母顺序按名字对员工进行排序,请按如下方式添加ORDER BY
子句进行查询:
SELECT employee_id, first_name, last_name, hire_date, salary FROM employees ORDER BY first_name;
执行上面查询语句,得到以下结果 -
+-------------+------------+-----------+------------+--------+ | employee_id | first_name | last_name | hire_date | salary | +-------------+------------+-----------+------------+--------+ | 103 | Alexander | Lee | 1990-01-03 | 9000 | | 115 | Alexander | Su | 1995-05-18 | 3100 | | 114 | Avg | Su | 1994-12-07 | 11000 | | 193 | Britney | Zhao | 1997-03-03 | 3900 | | 104 | Bruce | Wong | 1991-05-21 | 6000 | ... ... | 117 | Sigal | Zhang | 1997-07-24 | 3000 | | 100 | Steven | Lee | 1987-06-17 | 24000 | | 203 | Susan | Zhou | 1994-06-07 | 6500 | | 106 | Valli | Chen | 1998-02-05 | 4800 | | 206 | William | Wu | 1994-06-07 | 8300 | +-------------+------------+-----------+------------+--------+ 40 rows in set
现在,结果集按first_name
列的值的字母顺序进行排序。
3. SQL ORDER BY - 按多列排序示例
要将员工按名字(first_name
)列升序排列,然后再按姓氏(last_name
)降序排序,请使用以下语句:
SELECT employee_id, first_name, last_name, hire_date, salary FROM employees ORDER BY first_name, last_name DESC;
执行上面查询语句,得到以下结果 -
+-------------+------------+-----------+------------+--------+ | employee_id | first_name | last_name | hire_date | salary | +-------------+------------+-----------+------------+--------+ | 115 | Alexander | Su | 1995-05-18 | 3100 | | 103 | Alexander | Lee | 1990-01-03 | 9000 | | 114 | Avg | Su | 1994-12-07 | 11000 | | 193 | Britney | Zhao | 1997-03-03 | 3900 | | 104 | Bruce | Wong | 1991-05-21 | 6000 | | 179 | Charles | Yang | 2000-01-04 | 6200 | ... ... | 113 | Min | Su | 1999-12-07 | 6900 | | 122 | Min | Liu | 1995-05-01 | 7900 | | 108 | Nancy | Chen | 1994-08-17 | 12000 | | 101 | Neena | Wong | 1989-09-21 | 17000 | | 202 | Pat | Zhou | 1997-08-17 | 6000 | | 192 | Sarah | Zhang | 1996-02-04 | 4000 | | 123 | Shanta | Liu | 1997-10-10 | 6500 | | 205 | Shelley | Wu | 1994-06-07 | 12000 | | 116 | Shelli | Zhang | 1997-12-24 | 3000 | | 117 | Sigal | Zhang | 1997-07-24 | 3000 | | 100 | Steven | Lee | 1987-06-17 | 24000 | | 203 | Susan | Zhou | 1994-06-07 | 6500 | | 106 | Valli | Chen | 1998-02-05 | 4800 | | 206 | William | Wu | 1994-06-07 | 8300 | +-------------+------------+-----------+------------+--------+ 40 rows in set
首先,数据库系统按升序对第一列(first_name
)的结果集进行排序,然后按降序对按姓氏(last_name
)排序的排序结果进行排序。 请注意两名员工:Alexander Su
和Alexander Lee
的位置变化。
4. SQL ORDER BY - 按数字列示例排序
SQL用于按字母顺序对数据进行排序,如上例所示,并以数字方式对数据进行排序。 例如,以下语句选择员工数据,并按降序对薪水(salary
)列结果进行排序:
SELECT employee_id, first_name, last_name, hire_date, salary FROM employees ORDER BY salary DESC;
执行上面查询语句,得到以下结果 -
+-------------+------------+-----------+------------+--------+ | employee_id | first_name | last_name | hire_date | salary | +-------------+------------+-----------+------------+--------+ | 100 | Steven | Lee | 1987-06-17 | 24000 | | 101 | Neena | Wong | 1989-09-21 | 17000 | | 102 | Lex | Liang | 1993-01-13 | 17000 | | 145 | John | Liu | 1996-10-01 | 14000 | | 146 | Karen | Liu | 1997-01-05 | 13500 | | 201 | Michael | Zhou | 1996-02-17 | 13000 | | 108 | Nancy | Chen | 1994-08-17 | 12000 | | 205 | Shelley | Wu | 1994-06-07 | 12000 | ... ... | 193 | Britney | Zhao | 1997-03-03 | 3900 | | 115 | Alexander | Su | 1995-05-18 | 3100 | | 116 | Shelli | Zhang | 1997-12-24 | 2900 | | 117 | Sigal | Zhang | 1997-07-24 | 2800 | | 126 | Irene | Liu | 1998-09-28 | 2700 | | 118 | Guy | Zhang | 1998-11-15 | 2600 | | 119 | Karen | Zhang | 1999-08-10 | 2500 | +-------------+------------+-----------+------------+--------+ 40 rows in set
5. SQL ORDER BY - 按日期排序示例
除了字符和数字,SQL还可以按日期对结果集进行排序。 以下语句按hire_date
列中的值按升序对员工进行排序。
SELECT employee_id, first_name, last_name, hire_date, salary FROM employees ORDER BY hire_date;
执行上面查询语句,得到以下结果 -
+-------------+------------+-----------+------------+--------+ | employee_id | first_name | last_name | hire_date | salary | +-------------+------------+-----------+------------+--------+ | 100 | Steven | Lee | 1987-06-17 | 24000 | | 200 | Jennifer | Zhao | 1987-09-17 | 4400 | | 101 | Neena | Wong | 1989-09-21 | 17000 | | 103 | Alexander | Lee | 1990-01-03 | 9000 | | 104 | Bruce | Wong | 1991-05-21 | 6000 | | 102 | Lex | Liang | 1993-01-13 | 17000 | | 204 | Hermann | Wu | 1994-06-07 | 10000 | ...... | 107 | Diana | Chen | 1999-02-07 | 4200 | | 178 | Kimberely | Yang | 1999-05-24 | 7000 | | 119 | Karen | Zhang | 1999-08-10 | 2500 | | 113 | Min | Su | 1999-12-07 | 6900 | | 179 | Charles | Yang | 2000-01-04 | 6200 | +-------------+------------+-----------+------------+--------+ 40 rows in set
要查看刚刚加入公司的最新员工,可以按雇用日期(hire_date
)的降序对员工进行排序,如下面的语句所示:
SELECT employee_id, first_name, last_name, hire_date, salary FROM employees ORDER BY hire_date DESC;
执行上面查询语句,得到以下结果 -
+-------------+------------+-----------+------------+--------+ | employee_id | first_name | last_name | hire_date | salary | +-------------+------------+-----------+------------+--------+ | 179 | Charles | Yang | 2000-01-04 | 6200 | | 113 | Min | Su | 1999-12-07 | 6900 | | 119 | Karen | Zhang | 1999-08-10 | 2500 | | 178 | Kimberely | Yang | 1999-05-24 | 7000 | ...... | 104 | Bruce | Wong | 1991-05-21 | 6000 | | 103 | Alexander | Lee | 1990-01-03 | 9000 | | 101 | Neena | Wong | 1989-09-21 | 17000 | | 200 | Jennifer | Zhao | 1987-09-17 | 4400 | | 100 | Steven | Lee | 1987-06-17 | 24000 | +-------------+------------+-----------+------------+--------+ 40 rows in set
在本教程中,您学习了如何使用SQL ORDER BY
子句根据一个或多个列的升序或降序来对结果集进行排序。
这篇关于如何使用SQL ORDER BY子句按升序或降序进行排序的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?
- 2024-05-09这种运行结果里的10.100000001,怎么能最快改成10.1?