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关键字进行判断控制。这一文章所述的实现方式非常简单易懂,值得开发者掌握和应用。