阅读 180

SQL ORDER BY 子句(SQL 基础教程)

在本教程中,您将学习如何对SELECTSQL查询返回的数据进行排序。

对结果集排序

通常,当您使用SELECT语句从表中获取数据时,结果集中的行没有任何特定的顺序。如果要按特定顺序排列结果集,则可以在语句末尾指定ORDER BY子句,该子句告诉程序如何对查询返回的数据进行排序。默认排序顺序为升序。

语法

ORDER BY子句用于按升序或降序对查询返回的数据进行排序。该子句的基本语法可以通过以下方式给出:

SELECT column_list FROM table_name ORDER BY column_name ASC|DESC;

在这里,column_list是要获取其值的数据库表的名称年龄国家等列/字段的名称,而column_name是要排序的列的名称。让我们看一些示例,演示其实际工作方式。

考虑我们在数据库中有一个employees表,该表具有以下记录:

+--------+--------------+------------+--------+---------+| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 ||      2 | Tony Montana | 2002-07-15 |   6500 |       1 ||      3 | Sarah Connor | 2005-10-18 |   8000 |       5 ||      4 | Rick Deckard | 2007-01-03 |   7200 |       3 ||      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |+--------+--------------+------------+--------+---------+

单列排序

下面的SQL语句将从employees表中返回所有employee,并按emp_name列的升序对结果集进行排序。

示例

SELECT * FROM employees ORDER BY emp_name ASC;

您可以跳过该ASC选项,而仅使用以下语法。它返回与上一条语句相同的结果集,因为SQL默认排序顺序是升序的:

示例

SELECT * FROM employees ORDER BY emp_name;

执行上述命令后,您将获得如下输出:

+--------+--------------+------------+--------+---------+| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 ||      5 | Martin Blank | 2008-06-24 |   5600 |    NULL ||      4 | Rick Deckard | 2007-01-03 |   7200 |       3 ||      3 | Sarah Connor | 2005-10-18 |   8000 |       5 ||      2 | Tony Montana | 2002-07-15 |   6500 |       1 |+--------+--------------+------------+--------+---------+

同样,您可以使用DESC选项以降序执行排序。以下语句将按数字薪水(salary)列的降序排列结果集。

示例

SELECT * FROM employees ORDER BY salary DESC;

这次,您将获得如下结果集:

+--------+--------------+------------+--------+---------+| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 ||      4 | Rick Deckard | 2007-01-03 |   7200 |       3 ||      2 | Tony Montana | 2002-07-15 |   6500 |       1 ||      5 | Martin Blank | 2008-06-24 |   5600 |    NULL ||      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |+--------+--------------+------------+--------+---------+

多列排序

您还可以在排序时指定多个列。但是,除非表中有一些重复的值,否则结果集的更改将不可见。好吧,让我们找出:

为了更好地理解多列排序,我们假设我们在数据库中有一个名为Trainees的表,其中包含以下记录:

+----+------------+------------+-------------+--------+| id | first_name | last_name  | birth_date  | gender |
+----+------------+------------+-------------+--------+
|  1 | Peter      | Parker     | 1998-03-04  |  M     ||  2 | Harry      | Potter     | 2001-08-30  |  M     ||  3 | Peter      | Pan        | 2004-09-19  |  M     ||  4 | Alice      | Kingsleigh | 1999-07-02  |  F     ||  5 | John       | Connor     | 2002-01-15  |  M     |+----+------------+------------+-------------+--------+

如果您仔细查看表格,将会发现我们有一些重复的值。但是,受训者 Peter Parker 和 Peter Pan  的全名不同,但名字相同。

现在执行以下命令,该命令按first_name列对结果集进行排序

示例

SELECT * FROM trainees ORDER BY first_name;

执行后,您将获得如下输出:

+----+------------+------------+-------------+--------+| id | first_name | last_name  | birth_date  | gender |
+----+------------+------------+-------------+--------+
|  4 | Alice      | Kingsleigh | 1999-07-02  |  F     ||  2 | Harry      | Potter     | 2001-08-30  |  M     ||  5 | John       | Connor     | 2002-01-15  |  M     ||  1 | Peter      | Parker     | 1998-03-04  |  M     ||  3 | Peter      | Pan        | 2004-09-19  |  M     |+----+------------+------------+-------------+--------+

现在执行此语句,该语句按first_namelast_name列对结果集进行排序

示例

SELECT * FROM trainees ORDER BY first_name, last_name;
+----+------------+------------+-------------+--------+| id | first_name | last_name  | birth_date  | gender |
+----+------------+------------+-------------+--------+
|  4 | Alice      | Kingsleigh | 1999-07-02  |  F     ||  2 | Harry      | Potter     | 2001-08-30  |  M     ||  5 | John       | Connor     | 2002-01-15  |  M     ||  3 | Peter      | Pan        | 2004-09-19  |  M     ||  1 | Peter      | Parker     | 1998-03-04  |  M     |+----+------------+------------+-------------+--------+

您是否注意到以前的结果集和当前的结果集之间的区别-这次,学员“ Peter Parker”的记录紧随“ Peter Pan”之后。

由于两个受训者的名字都是“ Peter”,因此在这两个受训者的last_name列执行第二级排序,这就是为什么受训者“ Peter Parker”的记录在“ Peter Pan”之后。


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐