Trong hướng dẫn này, bạn sẽ học cách sử dụng mệnh đề LIMIT
trong MySQL để hạn chế số hàng được trả về bởi một truy vấn.
Mệnh đề LIMIT
được sử dụng trong câu lệnh SELECT
để giới hạn số hàng trả về. Mệnh đề LIMIT
chấp nhận một hoặc hai đối số. Giá trị của cả hai đối số phải bằng 0 hoặc số nguyên dương.
Sau đây minh họa cú pháp mệnh đề LIMIT
với hai đối số:
SELECT
select_list
FROM
table_name
LIMIT [offset,] row_count;
Trong cú pháp này:
offset
chỉ định vị trí của hàng đầu tiên sẽ trả về. offset
của hàng đầu tiên là 0, không phải 1.row_count
chỉ định số hàng tối đa để trả về.Hình ảnh sau đây minh họa mệnh đề LIMIT
:
Khi bạn sử dụng mệnh đề LIMIT
có một đối số, MySQL sẽ sử dụng đối số này để xác định số hàng tối đa trả về từ hàng đầu tiên của tập kết quả.
Do đó, hai mệnh đề này là tương đương:
LIMIT row_count;
Và
LIMIT 0, row_count;
Ngoài cú pháp trên, MySQL cung cấp cú pháp mệnh đề LIMIT
thay thế sau:
LIMIT row_count OFFSET offset
Theo mặc định, câu lệnh SELECT
trả về các hàng theo thứ tự không xác định. Khi bạn thêm mệnh đề LIMIT
vào câu lệnh SELECT
, các hàng trả về là không thể đoán trước.
Do đó, để đảm bảo mệnh đề LIMIT
trả về kết quả mong đợi, bạn nên luôn sử dụng nó với mệnh đề ORDER BY
như sau:
SELECT
select_list
FROM
table_name
ORDER BY
sort_expression
LIMIT offset, row_count;
Chúng ta sẽ sử dụng bảng customers
từ cơ sở dữ liệu mẫu để minh họa.
Câu lệnh này sử dụng mệnh đề LIMIT
để đưa ra năm khách hàng hàng đầu có tín dụng cao nhất:
SELECT
customerNumber,
customerName,
creditLimit
FROM
customers
ORDER BY creditLimit DESC
LIMIT 5;
Đầu ra:
Trong ví dụ này:
ORDER BY
sắp xếp các khách hàng theo các khoản tín dụng từ cao đến thấp.LIMIT
trả về 5 hàng đầu tiên.Tương tự, ví dụ này sử dụng mệnh đề LIMIT
để tìm năm khách hàng có tín dụng thấp nhất:
SELECT
customerNumber,
customerName,
creditLimit
FROM
customers
ORDER BY creditLimit
LIMIT 5;
Đầu ra:
Trong ví dụ này:
ORDER BY
sắp xếp các khách hàng theo các khoản tín dụng từ thấp đến cao.LIMIT
trả về 5 hàng đầu tiên.Bởi vì có hơn 5 khách hàng có tín dụng bằng 0, kết quả của truy vấn trên có thể dẫn đến một kết quả không nhất quán.
Để khắc phục sự cố này, bạn cần thêm nhiều cột hơn vào mệnh đề ORDER BY
để giới hạn hàng theo thứ tự duy nhất:
SELECT
customerNumber,
customerName,
creditLimit
FROM
customers
ORDER BY
creditLimit,
customerNumber
LIMIT 5;
Đầu ra:
Khi hiển thị dữ liệu trên màn hình, bạn thường muốn chia các hàng thành các trang, trong đó mỗi trang chứa một số lượng giới hạn các hàng như 10 hoặc 20.
Để tính số trang, bạn lấy tổng số hàng chia cho số hàng trên mỗi trang. Để tìm nạp các hàng của một trang cụ thể, bạn có thể sử dụng mệnh đề LIMIT
.
Truy vấn này sử dụng hàm tập hợp COUNT(*)
để lấy tổng số hàng từ bảng customers
:
SELECT
COUNT(*)
FROM
customers;
Đầu ra:
+----------+
| COUNT(*) |
+----------+
| 122 |
+----------+
1 row in set (0.00 sec)
Giả sử rằng mỗi trang có 10 hàng; để hiển thị 122 khách hàng, bạn có 13 trang. Trang thứ 13 cuối cùng chỉ chứa hai hàng.
Truy vấn này sử dụng mệnh đề LIMIT
để lấy các hàng của trang 1 chứa 10 khách hàng đầu tiên được sắp xếp theo tên khách hàng:
SELECT
customerNumber,
customerName
FROM
customers
ORDER BY customerName
LIMIT 10;
Đầu ra:
Truy vấn này sử dụng mệnh đề LIMIT
để lấy các hàng của trang thứ hai bao gồm các hàng 11 - 20:
SELECT
customerNumber,
customerName
FROM
customers
ORDER BY customerName
LIMIT 10, 10;
Đầu ra:
Trong ví dụ này, mệnh đề LIMIT 10, 10
trả về 10 hàng cho hàng 11-20.
Để nhận giá trị nth cao nhất hoặc thấp nhất, bạn sử dụng mệnh đề LIMIT
sau:
SELECT select_list
FROM table_name
ORDER BY sort_expression
LIMIT n-1, 1;
Mệnh đề LIMIT n-1, 1
trả về 1
hàng bắt đầu từ hàng n
.
Ví dụ: phần sau tìm khách hàng có tín dụng cao thứ hai:
SELECT
customerName,
creditLimit
FROM
customers
ORDER BY
creditLimit DESC
LIMIT 1,1;
Đầu ra:
Hãy kiểm tra kỹ kết quả. Truy vấn này trả về tất cả các khách hàng được sắp xếp theo tín dụng từ cao đến thấp:
SELECT
customerName,
creditLimit
FROM
customers
ORDER BY
creditLimit DESC;
Đầu ra:
Như bạn có thể thấy rõ từ đầu ra, kết quả đúng như mong đợi.
Lưu ý rằng kỹ thuật này hoạt động khi không có hai khách hàng có cùng hạn mức tín dụng. Để có kết quả chính xác hơn, bạn nên sử dụng hàm DENSE_RANK()
.
Nếu bạn sử dụng mệnh đề LIMIT
với mệnh đề DISTINCT
, MySQL ngay lập tức ngừng tìm kiếm khi nó tìm thấy số hàng duy nhất được chỉ định trong mệnh đề LIMIT
.
Ví dụ sử dụng mệnh đề LIMIT
với mệnh đề DISTINCT
để trả về năm trạng thái duy nhất đầu tiên trong bảng customers
:
SELECT DISTINCT
state
FROM
customers
WHERE
state IS NOT NULL
LIMIT 5;
Đầu ra:
LIMIT
trong MySQL để giới hạn số hàng được trả về bởi câu lệnh SELECT
.Bạn có thể vui lòng tắt trình chặn quảng cáo ❤️ để hỗ trợ chúng tôi duy trì hoạt động của trang web.
Trong hướng dẫn này, bạn sẽ học cách sử dụng toán tử MySQL IS NULLđể kiểm tra xem một giá trị có NULL hay không.
Trong hướng dẫn này, bạn sẽ học cách sử dụng câu lệnh UPDATE JOIN trong MySQL để thực hiện cập nhật bảng chéo.
Trong hướng dẫn này, bạn sẽ học cách sử dụng toán tử LIKE trong MySQL để truy vấn dữ liệu dựa trên một mẫu được chỉ định.
Trong hướng dẫn này, bạn sẽ học cách sử dụng toán tử BETWEEN trong MySQL để xác định xem một giá trị có nằm trong một dải giá trị hay không.