Code Tu Tam

Cách sử dụng toán tử LIMIT trong MySQL

5/5 - (1 bình chọn)

Xin chào các bạn! Tiếp tục với seri MySQL cơ bản, trong bài viết này các bạn sẽ tìm hiểu được cách sử dụng mệnh đề LIMIT của MySQL để hạn chế số lượng hàng được trả về bởi một truy vấn.

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

Mệnh LIMITđề được sử dụng trong SELECTcâu lệnh để hạn chế 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 là số không hoặc số nguyên dương .

Sau đây minh họa LIMITcú pháp mệnh đề với hai đối số:

SELECT 
    select_list
FROM
    table_name
LIMIT [offset,] row_count;

Trong cú pháp này:

  • offset chỉ định phần bù của hàng đầu tiên sẽ trả về. Hàng offsetđầu tiên là 0, không phải 1.
  • row_countchỉ định số lượng hàng tối đa để trả về.

Hình ảnh sau đây minh họa LIMITmệnh đề:

Khi bạn sử dụng  LIMITmệnh đề với một đối số, MySQL sẽ sử dụng đối số này để xác định số hàng tối đa sẽ 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 LIMITcú pháp mệnh đề thay thế sau:

LIMIT row_count OFFSET offset

Kết hợp mệnh đề LIMIT và ORDER BY

Theo mặc định, SELECTcâu lệnh trả về các hàng theo thứ tự không xác định. Khi bạn thêm LIMITmệnh đề vào SELECTcâu lệnh, các hàng được trả về sẽ không thể đoán trước.

Do đó, để đảm bảo LIMITmệnh đề trả về kết quả như mong đợi, bạn phải luôn sử dụng nó với một ORDER BYmệnh đề như sau:

SELECT 
    select_list
FROM 
    table_name
ORDER BY 
    sort_expression
LIMIT offset, row_count;

Ví dụ về mệnh đề LIMIT của MySQL

Chúng tôi sẽ sử dụng customersbảng từ cơ sở dữ liệu mẫu để lấy ví dụ.

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

Câu lệnh này sử dụng LIMITmệnh đề để có được 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;

Kết quả:

Trong ví dụ này:

  •  Đầu tiên ORDER BY sắp xếp khách hàng theo tín dụng từ cao đến thấp.
  •  Sau đó LIMIT trả về 5 hàng đầu tiên.

Tương tự, ví dụ này sử dụng LIMITmệnh đề để 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;

Kết quả:

Trong ví dụ này:

  • Đầu tiên ORDER BY sắp xếp khách hàng theo tín dụng từ thấp đến cao.
  • Sau đó LIMIT trả về 5 hàng đầu tiên.

Vì có hơn 5 khách hàng không có tín dụng nên kết quả của truy vấn trên có thể dẫn đến kết quả không nhất quán.

Để khắc phục điều này, bạn cần thêm nhiều cột hơn vào ORDER BYmệnh đề để giới hạn hàng theo thứ tự duy nhất:

SELECT 
    customerNumber, 
    customerName, 
    creditLimit
FROM
    customers
ORDER BY 
    creditLimit, 
    customerNumber
LIMIT 5;

Kết quả:

2) Sử dụng mệnh đề LIMIT của MySQL để phân trang

Khi bạn 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 hạn chế 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 LIMITmệnh đề.

Truy vấn này sử dụng COUNT(*) hàm tổng hợp để lấy tổng số hàng từ customersbảng:

SELECT 
    COUNT(*) 
FROM 
    customers;

Kết quả:

+----------+
| COUNT(*) |
+----------+
|      122 |
+----------+
1 row in set (0.00 sec)

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

3) Sử dụng MySQL LIMIT để lấy giá trị nth cao nhất hoặc thấp nhất

Để lấy giá trị nth cao nhất hoặc thấp nhất LIMIT n, bạn sử dụng mệnh đề 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;

Kết quả:

Hãy kiểm tra lại 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:

Như vậy bạn có thể thấy rõ ràng 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 đề GIỚI HẠN & DISTINCT của MySQL

Nếu bạn sử dụng LIMITmệnh đề với DISTINCT mệnh đề, 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 LIMITmệnh đề.

Ví dụ sử dụng LIMITmệnh đề với DISTINCTmệnh đề để trả về năm trạng thái duy nhất đầu tiên trong customersbảng:

SELECT DISTINCT
    state
FROM
    customers
WHERE
    state IS NOT NULL
LIMIT 5;

kết quả:

Tổng kết.

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

Bài viết liên quan:

Các bạn có thể xem thêm ở đây: https://www.mysqltutorial.org/mysql-limit.aspx

Exit mobile version