一文彻底搞懂数据库SQL查询中的ASC和DESC到底是什么(排序规则)

 更新时间:2026年07月02日 09:57:44   作者:杰西笔记  
在sql中排序是数据检索的核心操作之一,通过指定升序(asc)或降序(desc),可以灵活控制查询结果的显示顺序,这篇文章主要介绍了数据库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、基本语法

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

3、查询实战

ASC

DESC

二、实际代码示例

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

1、建表与插入数据

-- 创建学生表
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');

当前数据如下:

idnamescorebirth_date
1Alice85.52005-03-15
2Bob92.02004-07-22
3Carol78.02006-01-10
4David92.02005-11-05
5Eve85.52005-06-18

2、使用ASC升序排序

示例1:按分数升序排列(低分在前)

SELECT * FROM students ORDER BY score ASC;

结果:

idnamescorebirth_date
3Carol78.02006-01-10
1Alice85.52005-03-15
5Eve85.52005-06-18
2Bob92.02004-07-22
4David92.02005-11-05

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

示例2:按姓名字母升序排列

SELECT * FROM students ORDER BY name ASC;

结果:

idnamescorebirth_date
Carol78.02006-01-10
David92.02005-11-05
Eve85.52005-06-18
Alice85.52005-03-15
Bob92.02004-07-22

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

3、使用DESC降序排序

示例3:按分数降序排列(高分在前)

SELECT * FROM students ORDER BY score DESC;

结果:

idnamescorebirth_date
2Bob92.02004-07-22
4David92.02005-11-05
1Alice85.52005-03-15
5Eve85.52005-06-18
3Carol78.02006-01-10

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

示例4:按出生日期降序(最新出生的在前)

SELECT * FROM students ORDER BY birth_date DESC;

结果:

idnamescorebirth_date
3Carol78.02006-01-10
5Eve85.52005-06-18
4David92.02005-11-05
1Alice85.52005-03-15
2Bob92.02004-07-22

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

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

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

SELECT * FROM students 
ORDER BY score DESC, name ASC;

结果:

idnamescorebirth_date
2Bob92.02004-07-22
4David92.02005-11-05
1Alice85.52005-03-15
5Eve85.52005-06-18
3Carol78.02006-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
(默认)等同于 ASCORDER BY name

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

到此这篇关于数据库SQL查询中的ASC和DESC到底是什么的文章就介绍到这了,更多相关SQL查询ASC和DESC内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL数据库存储引擎和分支现状分析

    MySQL数据库存储引擎和分支现状分析

    在MySQL经历了2008年Sun的收购和2009年Oracle收购Sun的过程中,基本处于停滞发展的情况,在可以预见的未来,MySQL是肯定会被Oracle搁置并且逐步雪藏消灭掉的。
    2011-03-03
  • mysql数据库添加用户及分配权限具体实现

    mysql数据库添加用户及分配权限具体实现

    这篇文章主要介绍了mysql数据库添加用户及分配权限的方法,需要的朋友可以参考下
    2014-02-02
  • MySQL之存储引擎使用及说明

    MySQL之存储引擎使用及说明

    MySQL服务器结构包括连接层、服务层、引擎层和存储层,连接层校验用户权限;服务层处理SQL、存储过程等并生成指令序列;引擎层控制数据存储结构并执行指令;存储层是磁盘,物理存储数据,InnoDB是MySQL的一个存储引擎,支持ACID事务、行级锁和外键约束
    2025-12-12
  • 如何选择合适的MySQL存储引擎

    如何选择合适的MySQL存储引擎

    MySQL有多种存储引擎,MyISAM、InnoDB、MERGE、MEMORY(HEAP)、BDB(BerkeleyDB)、EXAMPLE、FEDERATED、ARCHIVE、CSV、BLACKHOLE。
    2011-09-09
  • MySQL InnoDB Cluster 常见管理命令

    MySQL InnoDB Cluster 常见管理命令

    本文基于实际操作场景,整理了 InnoDB Cluster 日常管理中高频使用的命令,涵盖连接、状态查询、成员管理、主从切换等核心操作,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-04-04
  • MySQL中JSON数据存储的最佳实践指南(直接存储 vs 文件路径存储)

    MySQL中JSON数据存储的最佳实践指南(直接存储 vs 文件路径存储)

    文章对比了直接存储JSON到MySQL字段和存储JSON文件路径两种方案,分析了各自的优缺点,并提供了基于MySQL的实现建议,最终建议根据具体业务需求选择合适的方案,感兴趣的朋友跟随小编一起看看吧
    2026-03-03
  • MySQL bit类型增加索引后查询结果不正确案例解析

    MySQL bit类型增加索引后查询结果不正确案例解析

    这篇文章主要介绍了MySQL bit类型增加索引后查询结果不正确案例浅析,我们先创建表student_attend,初始化一些数据,这篇文章的测试环境为MySQL 8.0.35社区版,具体内容介绍跟随小编一起学习吧
    2024-06-06
  • MySQL多实例的配置应用实例场景

    MySQL多实例的配置应用实例场景

    在一台服务器上,运行多个数据库服务,这些服务进程通过不同的socket监听不同的服务端口来提供各自的服务,这篇文章主要介绍了MySQL多实例的配置场景分析,需要的朋友可以参考下
    2021-12-12
  • MySQL 丢失数据的原因及解决

    MySQL 丢失数据的原因及解决

    这篇文章主要介绍了MySQL 丢失数据的原因及解决,帮助大家更好的理解和学习使用MySQL数据库,感兴趣的朋友可以了解下
    2021-05-05
  • MySQL添加索引的5种常用方式总结(附实用SQL代码)

    MySQL添加索引的5种常用方式总结(附实用SQL代码)

    在MySQL中可以使用ALTER TABLE语句来为表添加索引,索引可以提高查询性能,这篇文章主要介绍了MySQL添加索引的5种常用方式,文中还附实用SQL代码,需要的朋友可以参考下
    2025-07-07

最新评论