MySQL 如何在MySQL中按列排序并将空记录放在末尾?

MySQL 如何在MySQL中按列排序并将空记录放在末尾?

在实际应用中,我们经常需要对MySQL表中的数据进行排序操作。而在排序时,如果数据中存在空记录,有时我们希望它们排在最后面。那么在MySQL中,如何实现将空记录放在末尾的排序呢?本文将详细介绍。

阅读更多:MySQL 教程

排序语句

在MySQL中,我们可以使用ORDER BY语句对查询结果进行排序,其常见语法如下:

SELECT 列名1,列名n FROM 表名 ORDER BY 列名1,列名n [ ASC | DESC ];

其中,列名1、列名n代表需要排序的列名,ORDER BY子句可以指定多个排序字段,它们将按照从左到右的顺序排列。ASC表示升序,DESC表示降序,默认为升序排序。

按列排序时将空记录放在末尾

在默认情况下,MySQL中对NULL值的排序处理结果并不唯一,这也是造成很多开发者困惑的原因。通过在order by中指定IS NULL和IS NOT NULL可以实现空记录的位置控制。

SELECT 列名1,列名n FROM 表名 ORDER BY 列名1 IS NULL,列名1 [ ASC | DESC ];

上述sql语句中,第一个排序使用了IS NULL进行判断,优先排序列列名1是NULL的记录。而第二个排序关键字是列名1,表示按列名1来进行排序。如果想将空记录排在后面,则将IS NULL部分调整为IS NOT NULL即可。

SELECT 列名1,列名n FROM 表名 ORDER BY 列名1 IS NOT NULL,列名1 [ ASC | DESC ];

这时,如果列名1存在NULL值,则这些NULL值所在行将会排在结果的末尾。

实例演示

假设我们有如下一张表tb_order,其中列order_id、order_date为空记录,现在我们需要对其按price进行降序排序,并将空记录排在末尾。

order_id user_id order_date price
1 101 null 1000
2 102 2019-01-01 800
3 103 2019-01-02 950
4 104 2019-01-03 1200
5 null 2019-01-04 800

实现代码如下:

SELECT * FROM tb_order ORDER BY order_date IS NOT NULL, price DESC;

执行结果如下:

order_id user_id order_date price
5 null 2019-01-04 800
4 104 2019-01-03 1200
3 103 2019-01-02 950
2 102 2019-01-01 800
1 101 null 1000

以上结果表明,对于order_date列存在NULL值的记录5和1,它们被排在了结果的最后面。

结论

在MySQL中,通过ORDER BY语句可以方便地对查询结果进行排序。为了将空记录排在末尾,可以使用IS NULL和IS NOT NULL关键字进行判断控制。这一文章所述的实现方式非常简单易懂,值得开发者掌握和应用。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程