SQL ORDER BY子句

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子句的基本语法如下:

SELECT column-list
FROM table_name
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

其中, column-list 是我们想要检索的列的列表;ASC或DESC指定了排序顺序。

注意: 我们可以在ORDER BY子句中使用多个列,但需要确保排序所使用的列在列列表中指定。

使用ASC的ORDER BY子句

我们可以使用 SQL ORDER BY 子句,并指定 ASC 作为排序顺序,对查询结果集按升序(基于一个或多个列)进行排序。ASC是此子句的默认排序顺序,即在使用ORDER BY子句时,如果不显式指定排序顺序,数据将按升序排序。

示例

假设我们使用以下CREATE TABLE语句在MySQL数据库中创建了名为CUSTOMERS的表 –

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

以下查询使用INSERT语句将值插入此表中:

insert INTO CUSTOMERS VALUES
   (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);

得到的表格如下所示:

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表的记录进行升序排序。

SELECT * FROM CUSTOMERS ORDER BY NAME ASC;

输出

这将产生以下结果-

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 表的记录进行排序:

SELECT * FROM CUSTOMERS ORDER BY NAME DESC;

输出

这将产生以下结果:

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表中检索所有记录,并首先按照他们的地址升序排序,然后按照他们的薪水降序排序 –

SELECT * FROM CUSTOMERS ORDER BY AGE ASC, SALARY DESC;

输出

以下是产生的结果-

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的记录,并按照他们姓名的降序进行排序 –

SELECT * FROM CUSTOMERS WHERE AGE = 25 ORDER BY NAME DESC;

输出

以下是上述查询的输出结果 –

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子句的语法:

SELECT column1, column2, ...
FROM table_name
ORDER BY column_name1 [ASC | DESC], column_name2 [ASC | DESC], ...
LIMIT N;

示例

在这里,我们根据工资从CUSTOMERS表中检索前4条记录,并按姓名的升序进行排序 –

SELECT SALARY FROM CUSTOMERS ORDER BY NAME LIMIT 4;

输出

以下是上述查询的输出结果−

SALARY   
---  
6500.00   
8500.00   
2000.00   
1500.00   

按照首选顺序排序结果

可以使用 ORDER BY 子句中的 CASE 语句按照自定义的顺序对表中的记录进行排序。在子句中指定所有的值以及它们应该排序的位置;如果值没有给定任何数字,它们会自动按照升序排序。

示例

为了按照自定义的顺序获取行,使用的SELECT查询如下所示 −

SELECT * FROM CUSTOMERS
   ORDER BY (CASE ADDRESS
   WHEN 'MUMBAI' THEN 1
   WHEN 'DELHI' THEN 2
   WHEN 'HYDERABAD' THEN 3
   WHEN 'AHMEDABAD' THEN 4
   WHEN 'INDORE' THEN 5
   WHEN 'BHOPAL' THEN 6
   WHEN 'KOTA' THEN 7
   ELSE 100 END);

输出

上述查询根据使用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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程