Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Truy vấn MySQL sắp xếp theo giá trị NULL

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.