- SQL 教程
- SQL - 首页
- SQL - 概述
- SQL - RDBMS 概念
- SQL - 数据库
- SQL - 语法
- SQL - 数据类型
- SQL - 运算符
- SQL - 表达式
- SQL 数据库
- SQL - 创建数据库
- SQL - 删除数据库
- SQL - 选择数据库
- SQL - 重命名数据库
- SQL - 显示数据库
- SQL - 备份数据库
- SQL 表
- SQL - 创建表
- SQL - 显示表
- SQL - 重命名表
- SQL - 清空表
- SQL - 克隆表
- SQL - 临时表
- SQL - 修改表
- SQL - 删除表
- SQL - 删除表
- SQL - 约束
- SQL 查询
- SQL - INSERT 查询
- SQL - SELECT 查询
- SQL - SELECT INTO
- SQL - INSERT INTO SELECT
- SQL - UPDATE 查询
- SQL - DELETE 查询
- SQL - 排序结果
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL - WHERE 子句
- SQL - TOP 子句
- SQL - DISTINCT 子句
- SQL - ORDER BY 子句
- SQL - GROUP BY 子句
- SQL - HAVING 子句
- SQL - AND & OR
- SQL - 布尔 (BIT) 运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY, ALL 运算符
- SQL - EXISTS 运算符
- SQL - CASE
- SQL - NOT 运算符
- SQL - 不等于
- SQL - IS NULL
- SQL - IS NOT NULL
- SQL - NOT NULL
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION vs UNION ALL
- SQL - INTERSECT 运算符
- SQL - EXCEPT 运算符
- SQL - 别名
- SQL 连接
- SQL - 使用连接
- SQL - INNER JOIN
- SQL - LEFT JOIN
- SQL - RIGHT JOIN
- SQL - CROSS JOIN
- SQL - FULL JOIN
- SQL - 自连接
- SQL - DELETE JOIN
- SQL - UPDATE JOIN
- SQL - LEFT JOIN vs RIGHT JOIN
- SQL - UNION vs JOIN
- SQL 密钥
- SQL - UNIQUE KEY
- SQL - PRIMARY KEY
- SQL - FOREIGN KEY
- SQL - 组合键
- SQL - 备选键
- SQL 索引
- SQL - 索引
- SQL - 创建索引
- SQL - 删除索引
- SQL - 显示索引
- SQL - UNIQUE INDEX
- SQL - 聚簇索引
- SQL - 非聚簇索引
- 高级 SQL
- SQL - 通配符
- SQL - 注释
- SQL - 注入
- SQL - 托管
- SQL - MIN & MAX
- SQL - NULL 函数
- SQL - CHECK 约束
- SQL - DEFAULT 约束
- SQL - 存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL - 自动递增
- SQL - 日期和时间
- SQL - 游标
- SQL - 公共表表达式
- SQL - GROUP BY vs ORDER BY
- SQL - IN vs EXISTS
- SQL - 数据库调优
- SQL 函数参考
- SQL - 日期函数
- SQL - 字符串函数
- SQL - 聚合函数
- SQL - 数值函数
- SQL - 文本和图像函数
- SQL - 统计函数
- SQL - 逻辑函数
- SQL - 游标函数
- SQL - JSON 函数
- SQL - 转换函数
- SQL - 数据类型函数
- SQL 有用资源
- SQL - 问答
- SQL - 快速指南
- SQL - 有用函数
- SQL - 有用资源
- SQL - 讨论
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 子句中使用多个列,但是我们需要确保我们用于排序的列在 column-list 中指定。
带有 ASC 的 ORDER BY 子句
我们可以通过指定ASC作为排序顺序,使用SQL ORDER BY子句按升序(基于一个或多个列)对查询的结果集进行排序。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 | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | 艾哈迈达巴德 | 2000.00 |
2 | Khilan | 25 | 德里 | 1500.00 |
3 | Kaushik | 23 | 科塔 | 2000.00 |
4 | Chaitali | 25 | 孟买 | 6500.00 |
5 | Hardik | 27 | 博帕尔 | 8500.00 |
6 | Komal | 22 | 海得拉巴 | 4500.00 |
7 | Muffy | 24 | 因多尔 | 10000.00 |
在以下查询中,我们根据列 NAME 按升序对 CUSTOMERS 表的记录进行排序:
SELECT * FROM CUSTOMERS ORDER BY NAME ASC;
输出
这将产生以下结果:
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
4 | Chaitali | 25 | 孟买 | 6500.00 |
5 | Hardik | 27 | 博帕尔 | 8500.00 |
3 | Kaushik | 23 | 科塔 | 2000.00 |
2 | Khilan | 25 | 德里 | 1500.00 |
6 | Komal | 22 | 海得拉巴 | 4500.00 |
7 | Muffy | 24 | 因多尔 | 10000.00 |
1 | Ramesh | 32 | 艾哈迈达巴德 | 2000.00 |
带有 DESC 的 ORDER BY 子句
要按降序(基于一个或多个列)对查询的结果集进行排序,我们需要使用 ORDER BY 子句,并指定 DESC 作为排序顺序。
示例
以下查询根据客户名称的降序对 CUSTOMER 表的记录进行排序:
SELECT * FROM CUSTOMERS ORDER BY NAME DESC;
输出
这将产生以下结果:
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | Ramesh | 32 | 艾哈迈达巴德 | 2000.00 |
7 | Muffy | 24 | 因多尔 | 10000.00 |
6 | Komal | 22 | 海得拉巴 | 4500.00 |
2 | Khilan | 25 | 德里 | 1500.00 |
3 | Kaushik | 23 | 科塔 | 2000.00 |
5 | Hardik | 27 | 博帕尔 | 8500.00 |
4 | Chaitali | 25 | 孟买 | 6500.00 |
多列 ORDER BY 子句
我们可以使用 ORDER BY 子句按多个(多于一个)列对查询的结果集进行排序。当按多个列排序时,排序按 ORDER BY 子句中指定的顺序进行。换句话说,表将根据第一列(在查询中指定)进行排序,然后是第二列,依此类推。
示例
在以下查询中,我们从 CUSTOMERS 表中检索所有记录,并首先按其地址升序排序,然后按其薪水降序排序:
SELECT * FROM CUSTOMERS ORDER BY AGE ASC, SALARY DESC;
输出
以下是产生的结果:
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
6 | Komal | 22 | 海得拉巴 | 4500.00 |
3 | Kaushik | 23 | 科塔 | 2000.00 |
7 | Muffy | 24 | 因多尔 | 10000.00 |
4 | Chaitali | 25 | 孟买 | 6500.00 |
2 | Khilan | 25 | 德里 | 1500.00 |
5 | Hardik | 27 | 博帕尔 | 8500.00 |
1 | Ramesh | 32 | 艾哈迈达巴德 | 2000.00 |
带有 WHERE 子句的 ORDER BY
我们还可以将 WHERE 子句与 ORDER BY 子句一起使用,以对满足某些条件的行进行排序。当我们想要根据特定条件对表中的数据子集进行排序时,这非常有用。
示例
现在,我们从 CUSTOMERS 表中检索客户年龄为 25 的所有记录,并根据其名称的降序对其进行排序:
SELECT * FROM CUSTOMERS WHERE AGE = 25 ORDER BY NAME DESC;
输出
以下是上述查询的输出:
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
2 | Khilan | 25 | 德里 | 1500.00 |
4 | Chaitali | 25 | 孟买 | 6500.00 |
带有 LIMIT 子句的 ORDER BY
我们可以将 LIMIT 子句与 ORDER BY 子句一起使用,通过按升序或降序排序来限制指定的行数。
语法
以下是 MySQL 数据库中使用 LIMIT 子句与 ORDER BY 子句的语法:
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;
输出
以下是上述查询的输出:
薪水 |
---|
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 | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
4 | Chaitali | 25 | 孟买 | 6500.00 |
2 | Khilan | 25 | 德里 | 1500.00 |
6 | Komal | 22 | 海得拉巴 | 4500.00 |
1 | Ramesh | 32 | 艾哈迈达巴德 | 2000.00 |
7 | Muffy | 24 | 因多尔 | 10000.00 |
5 | Hardik | 27 | 博帕尔 | 8500.00 |
3 | Kaushik | 23 | 科塔 | 2000.00 |