4.1 GIỚI HẠN
Nếu bạn muốn truy vấn SQL của mình trả về quá nhiều dữ liệu, bạn có thể giới hạn trước số lượng tối đa. Xét cho cùng, các bảng có thể chứa hàng nghìn hoặc thậm chí hàng triệu hàng.
SQL giúp dễ dàng giới hạn số lượng hàng trong kết quả truy vấn bằng cách sử dụng phương thức LIMIT
. Từ khóa này được sử dụng ở cuối truy vấn SQL và có dạng như sau:
LIMIT quantity
Hãy viết một truy vấn đối với bảng sản phẩm, bảng này chứa danh sách các sản phẩm của cửa hàng chúng tôi. Nhưng vì chúng tôi có một cửa hàng rất thành công và chúng tôi bán được rất nhiều sản phẩm, nên chúng tôi chỉ muốn nhận được 10 dòng đầu tiên của câu trả lời. Đây là yêu cầu đó sẽ như thế nào:
SELECT * FROM product
LIMIT 10
Và chúng tôi nhận được kết quả truy vấn sau:
nhận dạng | tên | thương hiệu | giá | đếm |
---|---|---|---|---|
1 | Bàn | IKEA | 20.00 | 15 |
2 | Cái ghế | IKEA | 5,00 | 45 |
3 | Ghế sô pha | IKEA | 80.00 | 10 |
4 | Giường | IKEA | 75.00 | 10 |
5 | Buồng nhỏ | Bosch | 125.00 | 15 |
6 | Cái kệ | Cái kệ | 25.00 | 114 |
7 | TV | LG | 350.00 | 4 |
số 8 | Đèn | LG | 15.00 | 100 |
9 | tủ quần áo | IKEA | 99,00 | 10 |
10 | Đĩa | Bosch | 199.00 | 10 |
Bây giờ chúng tôi sẽ chỉ yêu cầu 5 hàng đầu tiên. Đây là yêu cầu đó sẽ như thế nào:
SELECT * FROM product
LIMIT 5
Chúng tôi nhận được kết quả truy vấn sau:
nhận dạng | tên | thương hiệu | giá | đếm |
---|---|---|---|---|
1 | Bàn | IKEA | 20.00 | 15 |
2 | Cái ghế | IKEA | 5,00 | 45 |
3 | Ghế sô pha | IKEA | 80.00 | 10 |
4 | Giường | IKEA | 75.00 | 10 |
5 | Buồng nhỏ | Bosch | 125.00 | 15 |
4.2 BÙ ĐẶT
Lần trước chúng ta đã học cách giới hạn số dòng trong phản hồi của máy chủ. Và bây giờ, thay vì hàng nghìn hàng từ bảng sản phẩm, chúng ta có thể lấy 10 hàng đầu tiên và hiển thị chúng cho người dùng. Nó là hoàn hảo. Nhưng làm cách nào để hiển thị 10 hàng thứ hai? Và thứ ba?
Nếu chúng ta viết LIMIT 20
, hoặc LIMIT 30
, máy chủ sẽ không trả về 20 và 30 hàng tương ứng chứ?
Đối với trường hợp này, SQL có một từ khóa đặc biệt OFFSET
mà bạn có thể yêu cầu máy chủ bỏ qua N dòng trong phản hồi của nó. Từ khóa này được sử dụng ở cuối truy vấn SQL (sau LIMIT
) và có dạng:
OFFSET quantity
Hãy viết một truy vấn trên bảng sản phẩm và cố gắng lấy các bản ghi từ 11 đến 15. Nói cách khác, chúng tôi đang yêu cầu máy chủ trả lại 5 hàng cho chúng tôi, nhưng trước tiên hãy bỏ qua 10 hàng đầu tiên của phản hồi. Đây là yêu cầu đó sẽ như thế nào:
SELECT * FROM product
LIMIT 5
OFFSET 10
Chúng tôi nhận được kết quả truy vấn sau:
nhận dạng | tên | thương hiệu | giá | đếm |
---|---|---|---|---|
mười một | Ghế bành | Bosch | 44.00 | số 8 |
12 | chậu hoa | hoa thông minh | 99,00 | 9 |
13 | Đứng | IKEA | 100.00 | 10 |
Máy chủ chỉ trả về 3 hàng, có nghĩa là có tổng cộng 13 hàng trong bảng của chúng tôi. Máy chủ bỏ qua 10 cái đầu tiên và trả về 5 cái tiếp theo.
4.3 CHỌN PHÂN BIỆT
Một từ khóa hữu ích khác là DISTINCT
. Nó được sử dụng khi có các bản ghi trùng lặp trong bảng và chúng tôi muốn xóa các bản sao đó.
Các bản sao đến từ đâu trong bảng của chúng tôi? Có thể không có các bản sao trong bảng, nhưng do truy vấn nên rất dễ dàng. Hãy viết một truy vấn sẽ trả về nhãn hiệu của tất cả các sản phẩm chúng tôi bán. Đây là yêu cầu đó sẽ như thế nào:
SELECT brand FROM product
Chúng tôi nhận được kết quả truy vấn sau:
thương hiệu |
---|
IKEA |
IKEA |
IKEA |
IKEA |
Bosch |
Bosch |
LG |
LG |
IKEA |
Bosch |
Bosch |
hoa thông minh |
IKEA |
Dễ dàng nhận thấy rằng có các hàng trùng lặp trong bảng này. Đó là để đảm bảo rằng không có bản sao nào và bạn cần sử dụng từ khóa DISTINCT
. Đây là những gì yêu cầu sửa chữa sẽ trông như thế nào:
SELECT DISTINCT brand
FROM product
Chúng tôi nhận được kết quả truy vấn sau:
thương hiệu |
---|
IKEA |
Bosch |
LG |
hoa thông minh |
Tốt hơn rất nhiều. Không phải nó? ;)
4.4 ĐẶT HÀNG THEO
Và cuối cùng chúng ta phải sắp xếp . Để sắp xếp kết quả của truy vấn, bạn cần sử dụng từ khóa ORDER BY
. Về mặt kỹ thuật, đây là hai từ, nhưng bản chất không quan trọng. Hai từ, một nhà điều hành.
Nó phải được viết sau từ khóa WHERE
, nhưng trước LIMIT
và OFFSET
. Nếu bạn viết ORDER BY
sau LIMIT
, thì máy chủ SQL sẽ trả về lỗi cho bạn.
Nói chung, toán tử này trông như thế này:
ORDER BY column order
Trong đó cột là tên của cột trong bảng/kết quả sắp xếp. Và thứ tự là thứ tự sắp xếp.
Thứ tự sắp xếp có thể có ba loại:
ASC
(từ Tăng dần) - tăng dần;DESC
(từ Giảm dần) - giảm dần;- Không được chỉ định - sẽ được sử dụng
ASC
Hãy viết một truy vấn sẽ trả về một danh sách các sản phẩm được sắp xếp theo giá theo thứ tự tăng dần. Đây là yêu cầu đó sẽ như thế nào:
SELECT * FROM product
ORDER BY price ASC
LIMIT 10
Chúng tôi nhận được kết quả truy vấn sau:
nhận dạng | tên | thương hiệu | giá | đếm |
---|---|---|---|---|
2 | Cái ghế | IKEA | 5,00 | 45 |
số 8 | Đèn | LG | 15.00 | 100 |
1 | Bàn | IKEA | 20.00 | 15 |
6 | Cái kệ | Bosch | 25.00 | 114 |
mười một | Ghế bành | Bosch | 44.00 | số 8 |
4 | Giường | IKEA | 75.00 | 10 |
3 | Ghế sô pha | IKEA | 80.00 | 10 |
12 | chậu hoa | hoa thông minh | 99,00 | 9 |
9 | tủ quần áo | IKEA | 99,00 | 10 |
13 | Đứng | IKEA | 100.00 | 10 |
Chúng tôi sẽ nhận được kết quả tương tự nếu chúng tôi không chỉ định thứ tự sắp xếp - chúng tôi sẽ bỏ qua từ ASC
.
4.5 ĐẶT HÀNG THEO trên nhiều cột
Toán tử ORDER BY
cho phép bạn sắp xếp kết quả theo nhiều cột. Điều này có thể rất hữu ích khi cột đầu tiên có nhiều phần tử trùng lặp. Dạng tổng quát của toán tử này như sau:
ORDER BY column 1 order 1, column 2 order 2, column 3 order 3
Nói cách khác, nếu sau khi sắp xếp theo cột đầu tiên, bạn có một số giá trị giống hệt nhau gần đó, thì chúng sẽ được sắp xếp theo cột thứ hai, v.v.
Hãy viết một truy vấn sẽ sắp xếp các sản phẩm của chúng ta theo nhãn hiệu và cho các sản phẩm có cùng nhãn hiệu - theo thứ tự số lượng giảm dần. Đây là yêu cầu đó sẽ như thế nào:
SELECT * FROM product
ORDER BY brand ASC, count
DESC
Chúng tôi nhận được kết quả truy vấn sau:
nhận dạng | tên | thương hiệu | giá | đếm |
---|---|---|---|---|
6 | Cái kệ | Bosch | 25.00 | 114 |
5 | Buồng nhỏ | Bosch | 125.00 | 15 |
10 | Đĩa | Bosch | 199.00 | 10 |
mười một | Ghế bành | Bosch | 44.00 | số 8 |
2 | Cái ghế | IKEA | 5,00 | 45 |
1 | Bàn | IKEA | 20.00 | 15 |
9 | tủ quần áo | IKEA | 99,00 | 10 |
13 | Đứng | IKEA | 100.00 | 10 |
4 | Giường | IKEA | 75.00 | 10 |
3 | Ghế sô pha | IKEA | 80.00 | 10 |
số 8 | Đèn | LG | 15.00 | 100 |
7 | TV | LG | 350.00 | 4 |
12 | chậu hoa | hoa thông minh | 99,00 | 9 |
Hãy xem kỹ bảng - các hàng của bảng được sắp xếp theo tên thương hiệu (thứ tự bảng chữ cái) và các hàng có cùng tên thương hiệu được sắp xếp theo số sản phẩm theo thứ tự giảm dần (cột cuối cùng).
GO TO FULL VERSION