SQL ORDER BY子句
SQL ORDER BY子句
SQL的 ORDER BY 子句用于根据一个或多个列的排序数据,可以按照升序或降序进行排序。该子句可以按照单个列或多个列进行排序。当需要按照层次结构排序数据时,比如按照州、城市,然后按照人的姓名进行排序,按照多个列进行排序会很有帮助。
ORDER BY与SQL SELECT语句一起使用,通常在WHERE、HAVING和GROUP BY子句之后指定。
以下是ORDER BY子句的重要点:
- 一些数据库默认按照升序对查询结果进行排序。
- 要按照升序排序数据,使用关键字 ASC 。
- 要按照降序排序数据,使用关键字 DESC 。
除了按照升序或降序排序记录外,ORDER BY子句还可以按照特定顺序对数据库表中的数据进行排序。
这个特定顺序可能不按照任何标准顺序(比如字母或字典顺序)对表的记录进行排序,而是根据外部条件进行排序。
例如,在包含组织客户详细信息的CUSTOMERS表中,可以根据他们所在城市的人口对记录进行排序。这不一定按照字母顺序排序,而是需要使用 CASE 语句手动定义顺序。
语法
ORDER BY子句的基本语法如下:
其中, column-list 是我们想要检索的列的列表;ASC或DESC指定了排序顺序。
注意: 我们可以在ORDER BY子句中使用多个列,但需要确保排序所使用的列在列列表中指定。
使用ASC的ORDER BY子句
我们可以使用 SQL ORDER BY 子句,并指定 ASC 作为排序顺序,对查询结果集按升序(基于一个或多个列)进行排序。ASC是此子句的默认排序顺序,即在使用ORDER BY子句时,如果不显式指定排序顺序,数据将按升序排序。
示例
假设我们使用以下CREATE TABLE语句在MySQL数据库中创建了名为CUSTOMERS的表 –
以下查询使用INSERT语句将值插入此表中:
得到的表格如下所示:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
在下面的查询中,我们根据列名NAME对CUSTOMERS表的记录进行升序排序。
输出
这将产生以下结果-
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
4 | Chaitali | 25 | Mumbai | 6500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
按降序使用 ORDER BY 子句
为了按照一个或多个列对查询的结果集进行降序排序,我们需要使用 ORDER BY 子句,并指定 DESC 作为排序顺序。
示例
下面的查询根据客户的姓名以降序的方式对 CUSTOMER 表的记录进行排序:
输出
这将产生以下结果:
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
7 | Muffy | 24 | Indore | 10000.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
按多列排序的ORDER BY子句
我们可以使用ORDER BY子句对查询的结果集按多个(多于一个)列进行排序。当按多个列排序时,排序是按照ORDER BY子句中指定的顺序进行的。换句话说,表格将根据第一列(在查询中指定的列)进行排序,然后是第二列,依此类推。
示例
在以下查询中,我们从CUSTOMERS表中检索所有记录,并首先按照他们的地址升序排序,然后按照他们的薪水降序排序 –
输出
以下是产生的结果-
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
6 | Komal | 22 | Hyderabad | 4500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |
7 | Muffy | 24 | Indore | 10000.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
使用WHERE子句的ORDER BY子句
我们还可以使用WHERE子句与ORDER BY子句一起使用,对满足特定条件的行进行排序。当我们想要基于特定标准对表中的数据子集进行排序时,这将非常有用。
示例
现在,我们正在从CUSTOMERS表中检索所有客户年龄为25的记录,并按照他们姓名的降序进行排序 –
输出
以下是上述查询的输出结果 –
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
2 | Khilan | 25 | Delhi | 1500.00 |
4 | Chaitali | 25 | Mumbai | 6500.00 |
使用LIMIT子句的ORDER BY子句
我们可以使用LIMIT子句和ORDER BY子句来通过按升序或降序对它们进行排序来限制指定数量的行。
语法
以下是在MySQL数据库中使用ORDER BY子句的LIMIT子句的语法:
示例
在这里,我们根据工资从CUSTOMERS表中检索前4条记录,并按姓名的升序进行排序 –
输出
以下是上述查询的输出结果−
按照首选顺序排序结果
可以使用 ORDER BY 子句中的 CASE 语句按照自定义的顺序对表中的记录进行排序。在子句中指定所有的值以及它们应该排序的位置;如果值没有给定任何数字,它们会自动按照升序排序。
示例
为了按照自定义的顺序获取行,使用的SELECT查询如下所示 −
输出
上述查询根据使用CASE语句定义的自定义顺序来对CUSTOMERS表进行排序。在这里,我们根据ADDRESS列中指定的城市的人口对记录进行排序。
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
4 | Chaitali | 25 | Mumbai | 6500.00 |
2 | Khilan | 25 | Delhi | 1500.00 |
6 | Komal | 22 | Hyderabad | 4500.00 |
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
7 | Muffy | 24 | Indore | 10000.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
3 | Kaushik | 23 | Kota | 2000.00 |