CodeGym /Các khóa học /SQL SELF /Giới hạn số dòng (LIMIT) và kiểm soát kết quả

Giới hạn số dòng (LIMIT) và kiểm soát kết quả

SQL SELF
Mức độ , Bài học
Có sẵn

Làm sao để giới hạn số dòng trả về từ truy vấn? Nếu bạn chỉ cần 5 sinh viên đầu tiên, nhân viên có lương cao nhất hoặc danh sách top-10 sản phẩm, thì LIMIT là thứ bạn cần đấy!

Khi làm việc với database, kết quả truy vấn có thể trả về một đống dữ liệu khổng lồ. Trong mấy trường hợp như vậy, bạn sẽ muốn giới hạn lượng dữ liệu trả về để:

  1. Giảm tải cho server và mạng.
  2. Dễ phân tích dữ liệu mà không phải cuộn chuột mỏi tay.

Ví dụ vui: tưởng tượng bạn muốn mời một cô gái ở quán bar uống nước, nhưng lại lỡ trả tiền cho tất cả mọi người trong quán. Ngầu thật đấy, nhưng đâu cần nhiều gái thế? Vậy nên mình học cách gọi đúng cái mình cần, và LIMIT sẽ giúp bạn làm điều đó.

Cú pháp cơ bản của LIMIT

Nhìn nó như này nè:

SELECT cột1, cột2
FROM bảng
LIMIT số_lượng_dòng;

Ví dụ 1: Giới hạn số bản ghi

Giả sử bạn có bảng students với 1000 dòng. Bạn chỉ muốn xem 3 dòng đầu tiên thôi:

SELECT *
FROM students 
LIMIT 3;

Kết quả:

id name age
1 Otto 20
2 Anna 22
3 Alex 19

Dễ hiểu ha: thay vì một danh sách dài, bạn chỉ thấy ba dòng thôi. LIMIT trả về đúng số dòng bạn yêu cầu.

Ứng dụng thực tế của LIMIT

Ví dụ 2: Top sản phẩm

Bạn làm việc với bảng sản phẩm products và muốn biết tên cùng giá của 5 món đắt nhất. Đầu tiên sắp xếp theo giá giảm dần, rồi giới hạn kết quả:

SELECT product_name, price
FROM products 
ORDER BY price DESC 
LIMIT 5;

Kết quả:

product_name price
iPhone 16 Pro Max 1500
MacBook Pro 1200
AirPods Pro 300
iPad Pro 280
Apple Watch 250

Bây giờ bạn chỉ thấy top-5 sản phẩm có giá cao nhất thôi.

LIMIT giúp test truy vấn như thế nào

Khi viết truy vấn SQL, chắc chắn bạn sẽ gặp mấy bảng dữ liệu to tổ chảng. LIMIT giúp bạn kiểm tra truy vấn trước bằng cách trả về ít dữ liệu thôi. Ví dụ:

SELECT *
FROM transactions_log
LIMIT 10;

Khi bạn chắc chắn truy vấn đúng rồi, có thể bỏ LIMIT đi.

Lưu ý khi dùng LIMIT

1. LIMIT mà không có ORDER BY

Nếu bạn không sắp xếp bằng ORDER BY, LIMIT sẽ trả về dữ liệu theo thứ tự ngẫu nhiên — thực ra là theo thứ tự lưu trong bảng. Thường thì không sao, nhưng đôi khi sẽ khó đoán.

Ví dụ:

SELECT name, age
FROM students 
LIMIT 3;

Không có ORDER BY thì bạn không biết chắc ba dòng nào sẽ được trả về đâu.

Để chắc ăn, hãy dùng ORDER BY:

SELECT name, age
FROM students 
ORDER BY age DESC 
LIMIT 3;

2. Kết hợp với WHERE

Bạn có thể kết hợp WHERE để lọc dòng và LIMIT để giới hạn kết quả. Rất tiện khi dữ liệu nhiều mà bạn chỉ quan tâm mấy dòng đầu tiên thôi.

SELECT *
FROM students 
WHERE age > 18 
LIMIT 5;

Truy vấn này sẽ trả về 5 sinh viên đầu tiên trên 18 tuổi.

3. Ứng dụng thực tế: xem trang đầu tiên của dữ liệu

Nếu bạn làm với hệ thống hiển thị dữ liệu (kiểu web app), LIMIT dùng để hiện trang đầu tiên của dữ liệu.

SELECT *
FROM employees 
ORDER BY hire_date 
LIMIT 10;

Ở đây bạn sẽ nhận được 10 nhân viên đầu tiên, sắp xếp theo ngày nhận việc.

Ví dụ nâng cao: Kết hợp LIMIT với hàm tổng hợp

Giả sử bạn muốn hiển thị ba danh mục sản phẩm phổ biến nhất:

SELECT category, COUNT(*) AS tổng_sản_phẩm
FROM products 
GROUP BY category 
ORDER BY tổng_sản_phẩm DESC 
LIMIT 3;

Truy vấn này sẽ nhóm sản phẩm theo danh mục, sắp xếp theo số lượng, rồi chỉ lấy ba dòng thôi.

Cách hoạt động của GROUP BY và hàm COUNT() sẽ được nói kỹ hơn ở bài sau nha.

Lỗi thường gặp khi dùng LIMIT

Khi dùng LIMIT, bạn có thể gặp mấy vấn đề sau:

"Thứ tự dòng ngẫu nhiên": nếu bạn quên ORDER BY, dữ liệu có thể trả về lung tung. Luôn chỉ định thứ tự nếu nó quan trọng với bạn.

"Cắt mất dữ liệu quan trọng": ví dụ, nếu hai bản ghi có giá trị giống nhau ở cột sắp xếp, LIMIT có thể trả về kết quả không đầy đủ. Hãy thêm tiêu chí sắp xếp phụ để tránh trường hợp này.

SELECT *
FROM students 
ORDER BY age DESC, name ASC 
LIMIT 5;

"Kết hợp WHERE không hợp lý". Đôi khi điều kiện lọc làm kết quả ít quá, LIMIT thành ra vô nghĩa. Ví dụ, nếu WHERE chỉ trả về 2 dòng mà LIMIT là 10, bạn vẫn chỉ nhận được 2 dòng thôi.

"Phụ thuộc vào database". Một số hệ quản trị cơ sở dữ liệu có cú pháp khác để giới hạn dòng (ví dụ TOP trong SQL Server). PostgreSQL thì dùng LIMIT nha.

Tại sao LIMIT lại quan trọng ngoài đời thực?

Giao diện có nhiều bản ghi: tưởng tượng bạn lướt web bán hàng, xem sản phẩm theo từng trang. Trang đầu chỉ có 10 dòng thôi, và LIMIT giúp làm được điều đó.

Báo cáo: thường bạn chỉ quan tâm phần đầu của dữ liệu (ví dụ top-5 nhân viên, người bán chạy nhất, sinh viên điểm cao nhất).

Test và tối ưu truy vấn: thay vì làm việc với hàng triệu dòng, bạn có thể test nhanh truy vấn trên một mẫu nhỏ.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION