- Giới thiệu SQL
- SQL là gì
- Các khái niệm RDBMS
- Database là gì
- Cú pháp SQL cơ bản
- Kiểu dữ liệu
- Toán tử
- Biểu thức (Expression)
- Lệnh Create Database
- Lệnh Drop Database
- Lệnh Select Database
- Lệnh Rename Database
- Lệnh Create Table
- Lệnh Drop Table
- Lệnh Delete Table
- Lệnh Rename Table
- Lệnh Truncate Table
- Lệnh ALter Table
- Sao chép bảng
- Bảng tạm (Temp Table)
- Truy vấn Update
- Truy vấn Insert
- Truy vấn Select
- Mệnh đề Order By
- Mệnh đề Group By
- Từ khóa Distinct
- Sắp xếp kết quả
- Mệnh đề Where
- Mệnh đề AND & OR
- Mệnh đề WITH
- Mệnh đề Like
- Mệnh đề Top
- Mệnh đề Union
- Giá trị NULL
- Cú pháp Alias
- Chỉ mục (Index)
- Sử dụng View
- Mệnh đề Having
- SQL Transaction
- Toán tử Wildcard
- Truy vấn con
- Sử dụng Sequence
- Xử lý bản sao
- SQL Injection
- Ràng buộc (Constraint)
- Ràng buộc NOT NULL
- Ràng buộc DEFAULT
- Ràng buộc UNIQUE
- Ràng buộc PRIMARY KEY
- Ràng buộc FOREIGN KEY
- Ràng buộc CHECK
- Ràng buộc INDEX
- Sử dụng Join
- Inner Join
- Left Join
- Right Join
- Full Join
- Self Join
- Cartesian Join
- Hàm hữu ích
- Hàm xử lý Date
- Hàm xử lý chuỗi
- Hàm xử lý số
- First Normal Form (1NF)
- Second Normal Form (2NF)
- Third Normal Form (3NF)
- Tuning DB
- Tài liệu SQL tham khảo
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.