Vấn đề:
Bạn muốn giới hạn số hàng trong tập hợp kết quả trong MySQL.
Ví dụ:
Cơ sở dữ liệu của chúng tôi có một bảng có tên là student
với dữ liệu trong các cột id
, first_name
, last_name
và age
.
id | first_name | last_name | tuổi |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Miller | 19 |
4 | Mary | Màu nâu | 25 |
5 | Lucy | Watson | 25 |
6 | Michael | Jackson | 22 |
Hãy chọn tên đầy đủ và tuổi của học sinh, nhưng giới hạn các hàng được trả về là ba.
Giải pháp:
SELECT first_name, last_name, age FROM student LIMIT 3;
Đây là kết quả của truy vấn:
id | first_name | last_name | tuổi |
---|---|---|---|
1 | Steven | Watson | 25 |
2 | Lisa | Anderson | 19 |
3 | Alice | Miller | 19 |
Thảo luận:
Mệnh đề LIMIT giới hạn số hàng trong tập kết quả. Nó được sử dụng trong câu lệnh SELECT, thường ở cuối câu lệnh. (Ngay cả ORDER BY cũng phải được liệt kê trước LIMIT.)
Đối số bắt buộc duy nhất là số hàng sẽ hiển thị. Trong ví dụ của chúng tôi, LIMIT 3 đã tạo ra một tập hợp kết quả chứa ba hàng. Trừ khi bạn chỉ định khác với đối số OFFSET, hàm này sẽ luôn trả về n đầu tiên hàng đáp ứng yêu cầu truy vấn.
Đối số OFFSET tùy chọn của LIMIT được đặt trước đối số cho biết số hàng được trả về. Nó cho biết vị trí của hàng đầu tiên được trả về bởi LIMIT (tức là ‘0’ là hàng đầu tiên, 1 là hàng thứ hai, v.v.). Phần bù và số hàng được phân tách bằng dấu phẩy.
Truy vấn trả về các bản ghi giống như truy vấn trước đó vì độ lệch bằng không. (Số không là giá trị bù mặc định.)
SELECT first_name, last_name, age FROM student LIMIT 0, 3;
Trong các truy vấn này, các hàng kết quả không có thứ tự. Nếu bạn muốn chọn ba hàng từ tập hợp kết quả đã sắp xếp, hãy sử dụng ĐẶT HÀNG BẰNG CÁCH:
SELECT first_name, last_name, age FROM student ORDER BY age DESC, last_name, first_name LIMIT 1,3;
Ở đây, trước tiên chúng tôi sắp xếp thứ tự các hàng theo tuổi (giảm dần), sau đó đến họ, rồi đến tên. Chúng tôi sử dụng giá trị offset để bắt đầu trên hàng trả về thứ hai và giới hạn kết quả ở ba hàng:
first_name | last_name | tuổi |
---|---|---|
Lucy | Watson | 25 |
Steven | Watson | 25 |
Michael | Jackson | 22 |
Truy vấn này trước tiên sắp xếp các hàng theo cột tuổi theo thứ tự giảm dần. Sau đó, nó sắp xếp theo last_name
và first_name
theo thứ tự tăng dần. Nếu bạn nhìn vào bảng, bạn sẽ thấy rằng những học sinh lớn tuổi nhất (Steven, Lucy, Mary) 25 tuổi. Tuy nhiên, Mary bị bỏ qua vì cô ấy là hàng đầu tiên và phần bù là 1 (tức là chúng ta đang bắt đầu với hàng thứ hai). Lucy bây giờ là người đầu tiên vì tên đầu tiên của cô ấy có trước Steven’s. (Steven và Lucy có cùng họ, vì vậy thứ tự của họ được xác định theo tên.) Michael 22 tuổi, điều này khiến anh ấy trở thành học sinh lớn tuổi nhất và cuối cùng trong ba hàng được trả về.