Sắp xếp và Giới hạn Kết quả trong MySQL: ORDER BY, LIMIT, OFFSET

Đăng ngày: 14-09-2025 06:10
mariadbcơ sở dữ liệuSQLMySQLsắp xếpORDER BYLIMITOFFSETGiới hạnPhân trang

Chào mừng bạn đến với bài viết thứ 5 trong loạt bài "Làm chủ MySQL & MariaDB". Chúng ta sẽ khám phá các kỹ thuật sắp xếp và giới hạn kết quả truy vấn.

Bài viết này tập trung vào ORDER BY, LIMIT và OFFSET. Đây là những công cụ mạnh mẽ để kiểm soát dữ liệu trả về.

Sử dụng ORDER BY để Sắp xếp Dữ liệu

ORDER BY cho phép bạn sắp xếp các hàng trong kết quả truy vấn. Bạn có thể sắp xếp theo một hoặc nhiều cột.

Cú pháp cơ bản là: SELECT column1, column2 FROM table_name ORDER BY column_name [ASC | DESC];

ASC (Ascending) sắp xếp theo thứ tự tăng dần (mặc định). DESC (Descending) sắp xếp theo thứ tự giảm dần.

Ví dụ với ASC (Tăng dần)

Giả sử chúng ta có bảng products với các cột id, name, và price.

Để sắp xếp sản phẩm theo giá tăng dần, ta dùng lệnh sau:

SELECT id, name, price FROM products ORDER BY price ASC;

Kết quả sẽ hiển thị các sản phẩm có giá thấp nhất trước.

Ví dụ với DESC (Giảm dần)

Để sắp xếp sản phẩm theo giá giảm dần, ta dùng lệnh sau:

SELECT id, name, price FROM products ORDER BY price DESC;

Kết quả sẽ hiển thị các sản phẩm có giá cao nhất trước.

Sắp xếp theo nhiều cột

Bạn có thể sắp xếp theo nhiều cột. Thứ tự sắp xếp sẽ theo thứ tự các cột được chỉ định.

Ví dụ, sắp xếp theo category tăng dần, sau đó theo price giảm dần:

SELECT id, name, category, price FROM products ORDER BY category ASC, price DESC;

Sử dụng LIMIT để Giới hạn Kết quả

LIMIT cho phép bạn giới hạn số lượng hàng trả về từ truy vấn.

Cú pháp cơ bản là: SELECT column1, column2 FROM table_name LIMIT number_of_rows;

Ví dụ về LIMIT

Để lấy 5 sản phẩm đầu tiên, ta dùng lệnh sau:

SELECT id, name, price FROM products LIMIT 5;

Kết quả sẽ trả về tối đa 5 hàng từ bảng products.

Kết hợp LIMIT và OFFSET để Phân trang

OFFSET chỉ định hàng bắt đầu để trả về. Nó thường được sử dụng với LIMIT để phân trang.

Cú pháp cơ bản là: SELECT column1, column2 FROM table_name LIMIT number_of_rows OFFSET start_row;

start_row là chỉ số của hàng bắt đầu (bắt đầu từ 0).

Ví dụ về Phân trang

Giả sử bạn muốn hiển thị 10 sản phẩm trên mỗi trang. Để lấy trang thứ 2, bạn cần bỏ qua 10 sản phẩm đầu tiên.

Lệnh để lấy trang thứ 2 là:

SELECT id, name, price FROM products LIMIT 10 OFFSET 10;

Để lấy trang thứ 3:

SELECT id, name, price FROM products LIMIT 10 OFFSET 20;

Công thức Phân trang

Tổng quát, để lấy trang thứ n với page_size sản phẩm trên mỗi trang, ta dùng công thức:

SELECT id, name, price FROM products LIMIT page_size OFFSET (n - 1) * page_size;

Ví dụ Tổng hợp

Lấy 3 sản phẩm đắt nhất trên trang thứ 2:

SELECT id, name, price FROM products ORDER BY price DESC LIMIT 3 OFFSET 3;

Câu lệnh này sẽ sắp xếp sản phẩm theo giá giảm dần, sau đó lấy 3 sản phẩm từ vị trí thứ 4 (offset 3).

Hiệu suất và Tối ưu

Khi sử dụng ORDER BY, LIMIT và OFFSET trên các bảng lớn, hiệu suất có thể bị ảnh hưởng.

Đảm bảo rằng các cột được sử dụng trong ORDER BY có index. Sử dụng EXPLAIN để phân tích truy vấn và tìm các điểm nghẽn.

Cân nhắc sử dụng kỹ thuật caching để giảm tải cho database.

Kết luận

Trong bài viết này, chúng ta đã tìm hiểu cách sử dụng ORDER BY, LIMIT và OFFSET để sắp xếp, giới hạn và phân trang kết quả truy vấn trong MySQL. Các kỹ thuật này rất quan trọng để xây dựng các ứng dụng web và API hiệu quả.

Hãy thực hành các ví dụ trên cơ sở dữ liệu của bạn và thử nghiệm với các tùy chọn khác nhau. Chúc bạn thành công trên con đường làm chủ MySQL!

0 Bình luận