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 OFFSETmà 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 LIMITOFFSET. Nếu bạn viết ORDER BYsau 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ụngASC

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