【数据库】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中最基础也最重要的功能之一。

相关推荐
liliangcsdn13 小时前
如何使用python创建和维护sqlite3数据库
数据库·sqlite
TDengine (老段)19 小时前
TDengine 数学函数 DEGRESS 用户手册
大数据·数据库·sql·物联网·时序数据库·iot·tdengine
TDengine (老段)19 小时前
TDengine 数学函数 GREATEST 用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
安当加密19 小时前
云原生时代的数据库字段加密:在微服务与 Kubernetes 中实现合规与敏捷的统一
数据库·微服务·云原生
爱喝白开水a19 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
想ai抽20 小时前
深入starrocks-多列联合统计一致性探查与策略(YY一下)
java·数据库·数据仓库
武子康20 小时前
Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
java·开发语言·数据库·sql·mongodb·性能优化·nosql
longgyy20 小时前
5 分钟用火山引擎 DeepSeek 调用大模型生成小红书文案
java·数据库·火山引擎
ytttr87321 小时前
C# 仿QQ聊天功能实现 (SQL Server数据库)
数据库·oracle·c#
盒马coding21 小时前
第18节-索引-Partial-Indexes
数据库·postgresql