SQL 结果排序
SQL ORDER BY 子句用于根据一个或多个列,按升序或降序对数据进行排序。默认情况下,某些数据库以升序对查询结果进行排序。
除此之外,ORDER BY 子句还可以对数据库表中的数据按照首选的顺序进行排序。这种情况下可能不会按照任何标准顺序(如字母顺序或词典顺序)对表的记录进行排序,而是可以根据任何外部条件进行排序。例如,在一个包含了组织的各个客户所下订单列表的 ORDERS 表中,可以根据订单下达的日期对订单的详细信息进行排序。这个排序不是按照字母顺序排序,而是按照“先到先得”的原则进行排序。
语法
ORDER BY 子句的基本语法用于按升序或降序对结果进行排序,如下所示−
SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];
在ORDER BY子句中可以使用多个列。确保无论使用哪个列进行排序,该列都应在列列表中。
按升序对结果进行排序
使用SQL中的ORDER BY子句,可以按升序对数据库表中的记录进行排序,可以使用默认设置,也可以在子句条件中指定”ASC”关键字。让我们看一个示例来理解这个过程。
示例
假设我们已经使用CREATE TABLE语句创建了一个名为 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 (ID,NAME,AGE,ADDRESS,SALARY) 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 |
以下是一个示例,按照姓名和薪资的升序排序结果。
SELECT * FROM CUSTOMERS ORDER BY NAME;
输出
这将产生以下结果-
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 |
按降序对结果排序
但是,要按降序对数据库表中的记录进行排序,我们需要在子句条件中指定”DESC”关键字。让我们看一个例子来了解这个。
示例
以下查询根据列 NAME 按降序对CUSTOMERS表的记录进行排序。
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 |
按照首选顺序排序结果
使用CASE语句和ORDER BY子句可以按照自己的首选顺序对表的记录进行排序。在子句中指定所有值以及它们应该被排序的位置;如果值没有给定任何数字,它们将自动按照升序排序。
示例
为了获取按照自己的首选顺序排序的行,使用的SELECT查询如下所示 –
SELECT * FROM CUSTOMERS
ORDER BY (CASE ADDRESS
WHEN 'DELHI' THEN 1
WHEN 'BHOPAL' THEN 2
WHEN 'KOTA' THEN 3
WHEN 'AHMEDABAD' THEN 4
WHEN 'Hyderabad' THEN 5
ELSE 100 END) ASC, ADDRESS DESC;
输出
这将产生以下结果 –
ID | NAME | AGE | ADDRESS | SALARY |
---|---|---|---|---|
2 | Khilan | 25 | Delhi | 1500.00 |
5 | Hardik | 27 | Bhopal | 8500.00 |
3 | kaushik | 23 | Kota | 2000.00 |
1 | Ramesh | 32 | Ahmedabad | 2000.00 |
6 | Komal | 22 | Hyderabad | 4500.00 | 4 | Chaitali | 25 | Mumbai | 6500.00 |
7 | Muffy | 24 | Indore | 10000.00 |
这将根据字段对客户进行排序,首先根据您的 特定顺序 进行排序,然后按照自然顺序排序其余地址。此外,剩余的地址将按照逆字母顺序排序。