Tạo bảng demo
mysql> create table DemoTable707 (
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentFirstName varchar(100),
StudentMarks int
);
Query OK, 0 rows affected (0.59 sec)
Chèn dữ liệu có NULL
mysql> insert into DemoTable707(StudentFirstName, StudentMarks) values('John', 45);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable707(StudentFirstName, StudentMarks) values(NULL, 65);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable707(StudentFirstName, StudentMarks) values('Chris', 78);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable707(StudentFirstName, StudentMarks) values(NULL, 89);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable707(StudentFirstName, StudentMarks) values('Robert', 99);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable707(StudentFirstName, StudentMarks) values(NULL, 34);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable707(StudentFirstName, StudentMarks) values('Mike', 43);
Query OK, 1 row affected (0.20 sec)
Hiển thị dữ liệu gốc
mysql> select * from DemoTable707;
Kết quả
+-----------+------------------+--------------+ | StudentId | StudentFirstName | StudentMarks | +-----------+------------------+--------------+ | 1 | John | 45 | | 2 | NULL | 65 | | 3 | Chris | 78 | | 4 | NULL | 89 | | 5 | Robert | 99 | | 6 | NULL | 34 | | 7 | Mike | 43 | +-----------+------------------+--------------+ 7 rows in set (0.00 sec)
Truy vấn: Sắp xếp NULL xuống cuối, tên không NULL sắp xếp Z-A
mysql> select * from DemoTable707 order by StudentFirstName IS NULL, StudentFirstName DESC;
Kết quả - NULL ở cuối, các tên khác Z-A
+-----------+------------------+--------------+ | StudentId | StudentFirstName | StudentMarks | +-----------+------------------+--------------+ | 5 | Robert | 99 | | 7 | Mike | 43 | | 1 | John | 45 | | 3 | Chris | 78 | | 2 | NULL | 65 | | 4 | NULL | 89 | | 6 | NULL | 34 | +-----------+------------------+--------------+ 7 rows in set (0.00 sec)
Giải thích:
StudentFirstName IS NULL: Trả về 1 (TRUE) nếu NULL, 0 (FALSE) nếu không NULL.ORDER BY ... DESC: 1 trước, 0 sau → NULL (1) xuống cuối.StudentFirstName DESC: Phụ thuộc thứ hai, sắp xếp Z-A cho nhóm không NULL.
Để NULL lên ĐẦU: ORDER BY StudentFirstName IS NULL DESC, StudentFirstName (mặc định ASC cho tên).
Tiêu chuẩn SQL (NULLS FIRST/LAST) - MySQL 8.0.2+: ORDER BY StudentFirstName DESC NULLS LAST.