ORDER BY trong SQL Server
Trong hướng dẫn này, bạn sẽ tìm hiểu cách sử dụng mệnh đề ORDER BY
trong SQL Server để sắp xếp tập kết quả của một truy vấn theo một hoặc nhiều cột.
Giới thiệu về mệnh đề ORDER BY trong SQL Server
Khi bạn sử dụng câu lệnh SELECT
để truy vấn dữ liệu từ một bảng, thứ tự các bản ghi trong tập kết quả không được đảm bảo. Điều đó có nghĩa là SQL Server có thể trả về một tập kết quả với một thứ tự không xác định.
Cách duy nhất để bạn đảm bảo rằng các bản ghi trong tập kết quả được sắp xếp là sử dụng mệnh đề ORDER BY
. Ví dụ sau đây minh họa cú pháp mệnh đề ORDER BY
:
SELECT
select_list
FROM
table_name
ORDER BY
column_name | expression [ASC | DESC]
Trong cú pháp này:
Đầu tiên, bạn chỉ định một tên cột hoặc một biểu thức để sắp xếp tập kết quả của truy vấn.
Nếu bạn chỉ định nhiều cột, tập kết quả được sắp xếp theo cột đầu tiên và sau đó tập kết quả được sắp xếp đó tiếp tục được sắp xếp theo cột thứ hai, v.v.
Các cột xuất hiện trong mệnh đề ORDER BY
phải tồn tại trong bảng được chỉ định trong mệnh đề FROM
.
Thứ hai, sử dụng ASC
hoặc DESC
để chỉ định các giá trị trong cột được chỉ định sẽ được sắp xếp theo thứ tự tăng dần hoặc giảm dần.
ASC
sắp xếp kết quả từ giá trị thấp nhất đến giá trị cao nhất (tăng dần) trong khi DESC
sắp xếp kết quả từ giá trị cao nhất đến giá trị thấp nhất (giảm dần).
Nếu bạn không chỉ định rõ ràng ASC
hoặc DESC
, SQL Server sử dụng ASC
làm thứ tự sắp xếp mặc định. Ngoài ra, SQL Server coi NULL là giá trị thấp nhất.
Khi xử lý câu lệnh SELECT
có mệnh đề ORDER BY
, mệnh đề ORDER BY
là mệnh đề được xử lý cuối cùng.
Ví dụ về mệnh đề ORDER BY trong SQL Server
Chúng tôi sẽ sử dụng bảng customers
trong cơ sở dữ liệu mẫu để minh họa sử dụng mệnh đề ORDER BY trong SQL Server.
Sắp xếp kết quả tăng dần theo một cột trong SQL Server
Câu lệnh sau sắp xếp danh sách khách hàng theo tên theo thứ tự tăng dần:
SELECT
first_name,
last_name
FROM
sales.customers
ORDER BY
first_name;
Đây là kết quả:
Trong ví dụ này, vì chúng tôi không chỉ định ASC
hay DESC
, mệnh đề ORDER BY
sẽ sử dụng ASC
theo mặc định.
Sắp xếp kết quả giảm dần theo một cột trong SQL Server
Câu lệnh sau sắp xếp danh sách khách hàng theo tên theo thứ tự giảm dần.
SELECT
firstname,
lastname
FROM
sales.customers
ORDER BY
first_name DESC;
Đây là kết quả:
Trong ví dụ này, vì chúng tôi đã chỉ định DESC
rõ ràng, mệnh đề ORDER BY
đã sắp xếp kết quả theo cột first_name
theo thứ tự giảm dần.
Sắp xếp kết quả tăng dần theo nhiều cột trong SQL Server
Câu lệnh sau đây trả về tên, họ và thành phố của khách hàng. Nó sắp xếp danh sách khách hàng theo thành phố trước và sau đó theo tên.
SELECT
city,
first_name,
last_name
FROM
sales.customers
ORDER BY
city,
first_name;
Đây là kết quả:
Trong ví dụ này, vì chúng tôi không chỉ định ASC
hay DESC
, mệnh đề ORDER BY
sẽ sử dụng ASC
theo mặc định.
Sắp xếp kết quả theo nhiều cột có kiểu sắp xếp khác nhau trong SQL Server
Câu lệnh sau sắp xếp khách hàng theo thành phố theo thứ tự giảm dần và sắp xếp theo tên theo thứ tự tăng dần.
SELECT
city,
first_name,
last_name
FROM
sales.customers
ORDER BY
city DESC,
first_name ASC;
Đây là kết quả:
Sắp xếp kết quả theo cột không được trả về trong SQL Server
Có thể sắp xếp kết quả theo một cột không xuất hiện trong danh sách kết quả trả về. Ví dụ: câu lệnh sau sắp xếp khách hàng theo trạng thái mặc dù cột state
không xuất hiện trong danh sách kết quả trả về.
SELECT
city,
first_name,
last_name
FROM
sales.customers
ORDER BY
state;
Đây là kết quả:
Lưu ý rằng cột state
phải có trong bảng customers
. Nếu không, bạn sẽ có một truy vấn không hợp lệ.
Sắp xếp kết quả theo một biểu thức trong SQL Server
Hàm LEN()
trả về số ký tự của một chuỗi. Câu lệnh sau sử dụng hàm LEN()
trong mệnh đề ORDER BY
để lấy danh sách khách hàng được sắp xếp theo độ dài của tên.
SELECT
first_name,
last_name
FROM
sales.customers
ORDER BY
LEN(first_name) DESC;
Đây là kết quả:
Sắp xếp theo vị trí của cột trong SQL Server
SQL Server cho phép bạn sắp xếp tập kết quả dựa trên vị trí của các cột xuất hiện trong danh sách kết quả trả về.
Câu lệnh sau sắp xếp khách hàng theo tên và họ. Nhưng thay vì chỉ định rõ ràng các tên cột, nó sử dụng các vị trí của các cột:
SELECT
first_name,
last_name
FROM
sales.customers
ORDER BY
1,
2;
Trong ví dụ này, 1 có nghĩa là cột first_name
và 2 có nghĩa là cột last_name
.
Sử dụng vị trí của các cột trong mệnh đề ORDER BY
được coi là thực hành lập trình xấu vì một vài lý do.
- Đầu tiên, các cột trong bảng không có vị trí và cần được tham chiếu theo tên.
- Thứ hai, khi bạn sửa đổi danh sách kết quả trả về, bạn có thể quên thực hiện các thay đổi tương ứng trong mệnh đề
ORDER BY
.
Do đó, cách tốt nhất là luôn chỉ định rõ ràng các tên cột trongmệnh đề ORDER BY
.
Trong hướng dẫn này, bạn đã học cách sử dụng mệnh đề ORDER BY
trong SQL Server để sắp xếp tập kết quả theo các cột theo thứ tự tăng dần hoặc giảm dần.