【数据库】SQL查询中的ASC和DESC到底是什么意思?一文彻底搞懂排序规则

文章目录


前言

在日常开发中,我们经常需要对数据库中的数据进行排序展示,比如"按时间最新排序"、"按价格从高到低"、"按姓名字母顺序"等。在SQL中,实现这些排序功能的核心就是 ASCDESC 关键字。本文将详细讲解它们的含义、用法和实际应用场景。

一、ASC和DESC的基本概念

1、什么是ASC和DESC?

ASCDESC 是SQL中用于指定排序顺序 的关键字,必须与 ORDER BY 子句配合使用。

  • ASC :代表 Ascending(升序),即从小到大、从早到晚、从A到Z的顺序。
  • DESC :代表 Descending(降序),即从大到小、从晚到早、从Z到A的顺序。

重要提示 :如果不显式指定排序方式,SQL默认使用 ASC 升序。

2、基本语法

sql 复制代码
SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;
  • ORDER BY 后面可以跟一个或多个列。
  • 多个列时,按从左到右的优先级进行排序(先按第一列排,相同再按第二列排)。

3、查询实战

ASC

DESC


二、实际代码示例

为了更好地理解,我们创建一个学生表 students 并插入一些测试数据。

1、建表与插入数据

sql 复制代码
-- 创建学生表
CREATE TABLE students (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    score DECIMAL(5,2),
    birth_date DATE
);

-- 插入测试数据
INSERT INTO students (name, score, birth_date) VALUES
('Alice', 85.5, '2005-03-15'),
('Bob', 92.0, '2004-07-22'),
('Carol', 78.0, '2006-01-10'),
('David', 92.0, '2005-11-05'),
('Eve', 85.5, '2005-06-18');

当前数据如下:

id name score birth_date
1 Alice 85.5 2005-03-15
2 Bob 92.0 2004-07-22
3 Carol 78.0 2006-01-10
4 David 92.0 2005-11-05
5 Eve 85.5 2005-06-18

2、使用ASC升序排序

示例1:按分数升序排列(低分在前)
sql 复制代码
SELECT * FROM students ORDER BY score ASC;

结果:

id name score birth_date
3 Carol 78.0 2006-01-10
1 Alice 85.5 2005-03-15
5 Eve 85.5 2005-06-18
2 Bob 92.0 2004-07-22
4 David 92.0 2005-11-05

✅ 解释:分数从低到高排序,78 → 85.5 → 92.0。

示例2:按姓名字母升序排列
sql 复制代码
SELECT * FROM students ORDER BY name ASC;

结果:

id name score birth_date
Carol 78.0 2006-01-10
David 92.0 2005-11-05
Eve 85.5 2005-06-18
Alice 85.5 2005-03-15
Bob 92.0 2004-07-22

✅ 解释:按字母顺序 A → B → C → D → E。


3、使用DESC降序排序

示例3:按分数降序排列(高分在前)
sql 复制代码
SELECT * FROM students ORDER BY score DESC;

结果:

id name score birth_date
2 Bob 92.0 2004-07-22
4 David 92.0 2005-11-05
1 Alice 85.5 2005-03-15
5 Eve 85.5 2005-06-18
3 Carol 78.0 2006-01-10

✅ 解释:分数从高到低排序,92.0 → 85.5 → 78.0。

示例4:按出生日期降序(最新出生的在前)
sql 复制代码
SELECT * FROM students ORDER BY birth_date DESC;

结果:

id name score birth_date
3 Carol 78.0 2006-01-10
5 Eve 85.5 2005-06-18
4 David 92.0 2005-11-05
1 Alice 85.5 2005-03-15
2 Bob 92.0 2004-07-22

✅ 解释:从最近的日期排到最早的日期。


三、多列排序(组合使用ASC和DESC)

有时我们需要按多个条件排序。例如:先按分数降序,分数相同再按姓名升序

sql 复制代码
SELECT * FROM students 
ORDER BY score DESC, name ASC;

结果:

id name score birth_date
2 Bob 92.0 2004-07-22
4 David 92.0 2005-11-05
1 Alice 85.5 2005-03-15
5 Eve 85.5 2005-06-18
3 Carol 78.0 2006-01-10

✅ 解释:

  • 分数92.0的两人:Bob 和 David,按姓名升序排,Bob(B)在前,David(D)在后。
  • 分数85.5的两人:Alice 和 Eve,Alice(A)在前,Eve(E)在后。

四、常见应用场景

场景 SQL示例
最新文章 SELECT * FROM articles ORDER BY created_at DESC
价格从低到高 SELECT * FROM products ORDER BY price ASC
销量排行榜 SELECT * FROM products ORDER BY sales_count DESC
按部门+工资排序 SELECT * FROM employees ORDER BY department ASC, salary DESC

五、注意事项

  1. NULL值的处理

    • 在大多数数据库中,NULL 值在 ASC 排序中会排在最前面或最后面,具体取决于数据库(MySQL中ASCNULL在前,DESC时在后)。
    • 可通过 IS NULLCOALESCE 控制。
  2. 性能优化

    • 对经常用于排序的列(如 created_at, score)建立索引,可大幅提升查询速度。
  3. 大小写敏感

    • 字符串排序可能受数据库的排序规则(Collation)影响,如 utf8mb4_general_ci 是不区分大小写的。

六、总结

关键字 含义 示例
ASC 升序(从小到大) ORDER BY score ASC
DESC 降序(从大到小) ORDER BY score DESC
(默认) 等同于 ASC ORDER BY name

通过本文的学习,你应该已经掌握了 ASCDESC 的核心用法。记住:ASC 是从小到大,DESC 是从大到小 ,结合 ORDER BY 可以灵活控制查询结果的展示顺序,是SQL中最基础也最重要的功能之一。

相关推荐
源代码•宸1 分钟前
Golang基础语法(go语言error、go语言defer、go语言异常捕获、依赖管理、Go Modules命令)
开发语言·数据库·后端·算法·golang·defer·recover
optimistic_chen3 分钟前
【Redis 系列】持久化特性
linux·数据库·redis·分布式·中间件·持久化
Coder码匠4 分钟前
从项目实践中学习 Spring 事务范围优化
数据库·spring
我的golang之路果然有问题21 分钟前
mysql 个人笔记导出之-数据库时间戳问题以及增删改查
数据库·笔记·学习·mysql·分享·个人笔记
张永清-老清24 分钟前
每周读书与学习->JMeter性能测试脚本编写实战(三)如何利用JMeter为MySQL数据库构造测试数据
数据库·测试工具·jmeter·压力测试·性能调优·jmeter性能测试·每周读书与学习
JH307330 分钟前
我的笔记:怎么用 MySQL 的 EXPLAIN 来分析 SQL
笔记·sql·mysql
亮子AI30 分钟前
注册成功的提示信息怎么写?
数据库·python
Clang's Blog31 分钟前
使用 SQL Server Management Studio 还原 .bak 备份文件的完整指南
数据库·sqlserver
ybb_ymm32 分钟前
如何通过跳板机链接mysql数据库
数据库·mysql