ORDER BY trong SQL Server

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.

Bảng Customers 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ả:

Sắp xếp kết quả tăng dần theo một cột trong SQL Server

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ả:

Sắp xếp kết quả giảm dần theo một cột trong SQL Server

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ả:

Sắp xếp kết quả theo nhiều cột trong SQL Server

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 nhiều cột có kiểu sắp xếp khác nhau trong SQL Server

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ả:

Sắp xếp kết quả theo cột không được trả về trong SQL Server

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 kết quả theo một biểu thức trong SQL Server

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.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *