Sắp xếp kết quả trong SQL




Mệnh đề ORDER BY trong SQL được sử dụng để sắp xếp dữ liệu theo thứ tự tăng dần hoặc giảm dần, trên một hoặc nhiều cột. Một số Database sắp xếp kết quả truy vấn theo thứ tự tăng dần theo mặc định.

Cú pháp

Cú pháp cơ bản của mệnh đề ORDER BY được sử dụng để sắp xếp dữ liệu theo thứ tự tăng dần hoặc giảm dần là như sau (ASC là sắp xếp theo thứ tự tăng dần và DESC là giảm dần):

SELECT danh_sach_cot 
FROM ten_bang 
[WHERE dieu_kien] 
[ORDER BY cot1, cot2, .. cotN] [ASC | DESC];

Bạn có thể sử dụng nhiều hơn một cột trong mệnh đề ORDER BY này. Đảm bảo rằng bất cứ cột nào bạn đang sử dụng để sắp xếp, thì nó nên có trong danh_sach_cot.

Ví dụ

Bảng SINHVIEN có các bản ghi sau:

+----+---------+-----+-----------+--------+
| ID |  TEN    | TUOI|  KHOAHOC  | HOCPHI |
+----+---------+-----+-----------+---------+
|  1 | Hoang   |  21 | CNTT      | 4       |
|  2 | Viet    |  19 | DTVT      | 3     |
|  3 | Thanh   |  18 | KTDN      |  4      |
|  4 | Nhan    |  19 | CK        |   4.5   |
|  5 | Huong   |  20 | TCNH      |   5     |
+----+---------+-----+-----------+---------+

Ví dụ sau sẽ sắp xếp kết quả theo thứ tự tăng dần cho TEN và HOCPHI.

SQL> SELECT * FROM SINHVIEN
     ORDER BY TEN, HOCPHI;

Ví dụ trên sẽ cho kết quả:

+----+----------+-----+-----------+----------+
| ID | TEN     | TUOI | KHOAHOC   | HOCPHI   |
+----+----------+-----+-----------+----------+
|  1 | Hoang |  21 | CNTT    |  4 |
|  5 | Huong   |  20 | TCNH    |  5 |
|  4 | Nhan  |  19 | CK      |  4.5 |
|  3 | Thanh   |  18 | KTDN     |  4 |
|  2 | Viet    |  19 | DTVT        |  3 |
+----+----------+-----+-----------+----------+

Ví dụ dưới đây sắp xếp kết quả theo thứ tự giảm dần cho TEN:

SQL> SELECT * FROM SINHVIEN
     ORDER BY TEN DESC;

Ví dụ trên sẽ cho kết quả:

+----+----------+-----+-----------+----------+
| ID | TEN     | TUOI | KHOAHOC   | HOCPHI   |
+----+----------+-----+-----------+----------+
|  2 | Viet    |  19 | DTVT        |  3 |
|  3 | Thanh   |  18 | KTDN     |  4 |
|  4 | Nhan  |  19 | CK      |  4.5 |
|  5 | Huong   |  20 | TCNH    |  5 |
|  1 | Hoang |  21 | CNTT    |  4 |
+----+----------+-----+-----------+----------+

Để lấy các hàng với thứ tự ưu tiên riêng, truy vấn SELECT sẽ như sau:

SQL> SELECT * FROM SINHVIEN
    ORDER BY (CASE KHOAHOC
    WHEN 'TCNH' 	 THEN 1
    WHEN 'KTDN' 	 THEN 2
    WHEN 'CNTT' 	 THEN 3
    ELSE 100 END) ASC, KHOAHOC DESC;

Ví dụ trên sẽ cho kết quả:

+----+----------+-----+-----------+----------+
| ID | TEN     | TUOI | KHOAHOC   | HOCPHI   |
+----+----------+-----+-----------+----------+
|  5 | Huong   |  20 | TCNH    |  5 |
|  3 | Thanh   |  18 | KTDN     |  4 |
|  1 | Hoang |  21 | CNTT    |  4 |
|  2 | Viet    |  19 | DTVT        |  3 |
|  4 | Nhan  |  19 | CK      |  4.5 |
+----+----------+-----+-----------+----------+

Đầu tiên, sẽ sắp xếp sinh viên theo KHOAHOC theo thứ tự của riêng bạn, sau đó, các KHOAHOC còn lại sẽ được sắp xếp thứ tự tự nhiên. Các KHOAHOC còn lại này cũng sẽ được sắp xếp theo thứ tự chữ cái đảo ngược.