Skip to content

ORDER BY: Sắp xếp dữ liệu

Khi bạn SELECT mà không có ORDER BY, thứ tự trả về là ngẫu nhiên (hoặc theo thứ tự lưu trữ trên đĩa), không đảm bảo nhất quán. Để sắp xếp kết quả, ta dùng ORDER BY.

Cú pháp (Syntax)

sql
SELECT columns
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC];
  • ASC: Tăng dần (Mặc định nếu không ghi gì).
  • DESC: Giảm dần.

Ví dụ thực tế (Real-world Example)

Yêu cầu 1: Xem danh sách sản phẩm giá rẻ nhất lên đầu (Tăng dần về giá).

sql
SELECT product_name, price
FROM products
ORDER BY price ASC;

Yêu cầu 2: Sắp xếp người dùng theo Quốc gia A->Z, nếu trùng quốc gia thì ai đăng ký mới nhất lên đầu (Giảm dần theo ngày tạo).

sql
SELECT full_name, country, created_at
FROM users
ORDER BY country ASC, created_at DESC;

💡 HPN Pro Tip: File Sort vs Index Sort

Sắp xếp là một tác vụ tốn kém CPU.

  • Tốt (Index Sort): Nếu bạn có Index trên cột created_at, câu lệnh ORDER BY created_at sẽ cực nhanh vì Index đã được sắp xếp sẵn. Database chỉ việc đọc tuần tự.
  • Chậm (File Sort): Nếu bạn sắp xếp trên một cột không có Index, Database phải tải dữ liệu vào RAM (hoặc ghi ra đĩa tạm nếu RAM đầy) để thực hiện thuật toán sắp xếp (QuickSort/MergeSort). Đây gọi là "Using filesort" trong EXPLAIN.

Kinh nghiệm: Luôn cố gắng đánh Index cho các cột thường xuyên dùng để sắp xếp (ví dụ: created_at, price).

⚠️ Common Mistake

Nhầm lẫn thứ tự ưu tiên khi sắp xếp nhiều cột.

sql
ORDER BY col1, col2 DESC

Nhiều bạn nghĩ DESC áp dụng cho cả 2. Sai! SQL hiểu là: col1 (ASC - mặc định), col2 (DESC).

Nếu muốn cả 2 cùng giảm dần, phải viết rõ:

sql
ORDER BY col1 DESC, col2 DESC