1. 表结构与数据

DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` int NOT NULL AUTO_INCREMENT,
`test_id` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

2. 方法

方式一

SELECT * FROM test ORDER BY num IS NULL , num;

方式二

SELECT * FROM test ORDER BY IF(ISNULL(num),1,0), num DESC;

1. 将NULL强制放在最前
IF(ISNULL(字段名),0,1) ASC // ASC可以省略

2. 将null强制放在最后
IF(ISNULL(字段名),0,1) DESC
IF(ISNULL(字段名),1,0) ASC // ASC可以省略
查询空值的运行速度基本上为: IFNULL() > IS NULL > ISNULL()