Mệnh đề LIMIT trong MySQL

Mệnh đề LIMIT trong MySQL

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.

Giới thiệu về mệnh đề LIMIT trong MySQL

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:

  • Giá trị 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:

Mệnh đề LIMIT trong MySQL

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;

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

Mệnh đề LIMIT và ORDER BY

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;

Ví dụ mệnh đề LIMIT trong MySQL

Chúng ta sẽ sử dụng bảng customers từ cơ sở dữ liệu mẫu để minh họa.

Ví dụ mệnh đề LIMIT trong MySQL

Sử dụng LIMIT trong MySQL để lấy các hàng cao nhất hoặc thấp nhất

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:

Ví dụ mệnh đề LIMIT trong MySQL

Trong ví dụ này:

  • Đầu tiên, mệnh đề 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.
  • Sau đó, mệnh đề 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:

Ví dụ mệnh đề LIMIT trong MySQL

Trong ví dụ này:

  • Đầu tiên, mệnh đề 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.
  • Sau đó, mệnh đề 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:

Ví dụ mệnh đề LIMIT trong MySQL

Sử dụng mệnh đề LIMIT trong MySQL để phân trang

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:

Ví dụ mệnh đề LIMIT trong MySQL

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:

Ví dụ mệnh đề LIMIT trong MySQL

Trong ví dụ này, mệnh đề LIMIT 10, 10 trả về 10 hàng cho hàng 11-20.

Sử dụng LIMIT trong MySQL để nhận giá trị nth cao nhất hoặc thấp nhất

Để 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:

Ví dụ mệnh đề LIMIT trong MySQL

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:

Ví dụ mệnh đề LIMIT trong MySQL

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().

Mệnh đề LIMIT & DISTINCT trong MySQL

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:

Ví dụ mệnh đề LIMIT trong MySQL

Tóm lược

  • Sử dụng mệnh đề LIMIT trong MySQL để giới hạn số hàng được trả về bởi  câu lệnh SELECT.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *