- 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 - 插入查询
- SQL - 选择查询
- SQL - 选择进入
- SQL - 插入选择
- SQL - 更新查询
- SQL - 删除查询
- SQL - 对结果进行排序
- SQL 视图
- SQL - 创建视图
- SQL - 更新视图
- SQL - 删除视图
- SQL - 重命名视图
- SQL 运算符和子句
- SQL-Where 子句
- SQL - 顶部子句
- SQL - 不同子句
- SQL - Order By 子句
- SQL - Group By 子句
- SQL-Having 子句
- SQL - 与与或
- SQL - 布尔(位)运算符
- SQL - LIKE 运算符
- SQL - IN 运算符
- SQL - ANY、ALL 运算符
- SQL - EXISTS 运算符
- SQL-案例
- SQL - NOT 运算符
- SQL - 不等于
- SQL - 为空
- SQL - 不为空
- SQL - 非空
- SQL - BETWEEN 运算符
- SQL - UNION 运算符
- SQL - UNION 与 UNION ALL
- SQL - 相交运算符
- SQL - EXCEPT 运算符
- 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-唯一索引
- SQL - 聚集索引
- SQL - 非聚集索引
- 高级SQL
- SQL - 通配符
- SQL - 注释
- SQL-注入
- SQL-托管
- SQL - 最小值和最大值
- SQL - 空函数
- SQL - 检查约束
- SQL - 默认约束
- SQL-存储过程
- SQL - NULL 值
- SQL - 事务
- SQL - 子查询
- SQL - 处理重复项
- SQL - 使用序列
- SQL-自动递增
- SQL - 日期和时间
- SQL-游标
- SQL - 公用表表达式
- SQL - 分组依据与排序依据
- SQL - IN 与 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 子句中使用多个列,但我们需要确保用于排序的列在列列表中指定。
带 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 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
2 | 基兰 | 25 | 德里 | 1500.00 |
3 | 考希克 | 23 | 科塔 | 2000.00 |
4 | 柴塔利 | 25 | 孟买 | 6500.00 |
5 | 哈迪克 | 27 | 博帕尔 | 8500.00 |
6 | 科马尔 | 22 | 海得拉巴 | 4500.00 |
7 | 莫菲 | 24 | 印多尔 | 10000.00 |
在以下查询中,我们根据 NAME 列按升序对 CUSTOMERS 表的记录进行排序 -
SELECT * FROM CUSTOMERS ORDER BY NAME ASC;
输出
这将产生以下结果 -
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
4 | 柴塔利 | 25 | 孟买 | 6500.00 |
5 | 哈迪克 | 27 | 博帕尔 | 8500.00 |
3 | 考希克 | 23 | 科塔 | 2000.00 |
2 | 基兰 | 25 | 德里 | 1500.00 |
6 | 科马尔 | 22 | 海得拉巴 | 4500.00 |
7 | 莫菲 | 24 | 印多尔 | 10000.00 |
1 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
带 DESC 的 ORDER BY 子句
要按降序(基于一列或多列)对查询的结果集进行排序,我们需要通过指定 DESC 作为排序顺序来使用 ORDER BY 子句。
例子
以下查询根据客户姓名的降序对 CUSTOMER 表的记录进行排序 -
SELECT * FROM CUSTOMERS ORDER BY NAME DESC;
输出
这将产生如下结果 -
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
1 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
7 | 莫菲 | 24 | 印多尔 | 10000.00 |
6 | 科马尔 | 22 | 海得拉巴 | 4500.00 |
2 | 基兰 | 25 | 德里 | 1500.00 |
3 | 考希克 | 23 | 科塔 | 2000.00 |
5 | 哈迪克 | 27 | 博帕尔 | 8500.00 |
4 | 柴塔利 | 25 | 孟买 | 6500.00 |
多列上的 ORDER BY 子句
我们可以使用 ORDER BY 子句按多个(多个)列对查询的结果集进行排序。按多列排序时,按照 ORDER BY 子句中指定的顺序进行排序。换句话说,表将根据第一列(在查询中指定)排序,然后是第二列,依此类推。
例子
在下面的查询中,我们从 CUSTOMERS 表中检索所有记录,并首先按地址升序对它们进行排序,然后按工资降序排列 -
SELECT * FROM CUSTOMERS ORDER BY AGE ASC, SALARY DESC;
输出
以下是产生的结果 -
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
6 | 科马尔 | 22 | 海得拉巴 | 4500.00 |
3 | 考希克 | 23 | 科塔 | 2000.00 |
7 | 莫菲 | 24 | 印多尔 | 10000.00 |
4 | 柴塔利 | 25 | 孟买 | 6500.00 |
2 | 基兰 | 25 | 德里 | 1500.00 |
5 | 哈迪克 | 27 | 博帕尔 | 8500.00 |
1 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
带 WHERE 子句的 ORDER BY
我们还可以使用 WHERE 子句和 ORDER BY 子句对满足某些条件的行进行排序。当我们想要根据特定条件对表中的数据子集进行排序时,这非常有用。
例子
现在,我们从 CUSTOMERS 表中检索客户年龄为 25 岁的所有记录,并按照姓名的降序对它们进行排序 -
SELECT * FROM CUSTOMERS WHERE AGE = 25 ORDER BY NAME DESC;
输出
以下是上述查询的输出 -
ID | 姓名 | 年龄 | 地址 | 薪水 |
---|---|---|---|---|
2 | 基兰 | 25 | 德里 | 1500.00 |
4 | 柴塔利 | 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 | 柴塔利 | 25 | 孟买 | 6500.00 |
2 | 基兰 | 25 | 德里 | 1500.00 |
6 | 科马尔 | 22 | 海得拉巴 | 4500.00 |
1 | 拉梅什 | 32 | 艾哈迈达巴德 | 2000.00 |
7 | 莫菲 | 24 | 印多尔 | 10000.00 |
5 | 哈迪克 | 27 | 博帕尔 | 8500.00 |
3 | 考希克 | 23 | 科塔 | 2000.00 |