Hướng dẫn sắp xếp trong mysql

Trong hướng dẫn này, bạn sẽ học cách sắp xếp thứ tự các hàng trong tập kết quả bằng mệnh đề

ORDER BY column1 DESC;
8 trong MySQL.

Giới thiệu về mệnh đề ORDER BY trong MySQL

Khi bạn sử dụng câu lệnh

ORDER BY column1 DESC;
9 để truy vấn dữ liệu từ một bảng, thứ tự của các hàng trong tập kết quả là không xác định. Để sắp xếp các hàng trong tập kết quả, bạn thêm mệnh đề
ORDER BY column1 DESC;
8 vào câu lệnh
ORDER BY column1 ASC;
1.

Sau đây minh họa cú pháp của mệnh đề

ORDER BY column1 DESC;
8:

SELECT 
   select_list
FROM 
   table_name
ORDER BY 
   column1 [ASC|DESC], 
   column2 [ASC|DESC],
   ...;

Trong cú pháp này, bạn chỉ định một hoặc nhiều cột mà bạn muốn sắp xếp sau mệnh đề

ORDER BY column1 DESC;
8.

Từ khóa

ORDER BY column1 ASC;
4 viết tắt của tăng dần (ascending) và
ORDER BY column1 ASC;
5 viết tắt của giảm dần (descending). Bạn sử dụng
ORDER BY column1 ASC;
4 để sắp xếp tập kết quả theo thứ tự tăng dần và
ORDER BY column1 ASC;
5 sắp xếp tập kết quả theo thứ tự giảm dần tương ứng.

Mệnh đề

ORDER BY column1 DESC;
8 này sắp xếp kết quả theo thứ tự tăng dần theo các giá trị của cột
ORDER BY column1 ASC;
9:

ORDER BY column1 ASC;

Và mệnh đề

ORDER BY column1 DESC;
8 này sắp xếp kết quả theo thứ tự giảm dần theo các giá trị của cột
ORDER BY column1 ASC;
9:

ORDER BY column1 DESC;

Theo mặc định, mệnh đề

ORDER BY column1 DESC;
8 sử dụng
ORDER BY column1 ASC;
4 nếu bạn không chỉ định rõ ràng bất kỳ tùy chọn nào. Do đó, các mệnh đề
ORDER BY column1 DESC;
8 sau là tương đương:

ORDER BY column1 ASC;

ORDER BY column1;

Nếu bạn muốn sắp xếp kết quả theo nhiều cột, bạn chỉ định danh sách các cột được phân tách bằng dấu phẩy trong mệnh đề

ORDER BY column1 DESC;
8:

ORDER BY
   column1,
   column2;

Trong trường hợp này, mệnh đề

ORDER BY column1 DESC;
8 sắp xếp thứ tự kết quả theo thứ tự tăng dần của cột
ORDER BY column1 ASC;
9 trước và sau đó sắp xếp kết quả theo thứ tự tăng dần của cột
ORDER BY column1;
8.

Có thể sắp xếp thứ tự kết quả theo một cột theo thứ tự tăng dần và sau đó theo một cột khác theo thứ tự giảm dần:

ORDER BY
    column1 ASC,
    column2 DESC;

Trong trường hợp này, mệnh đề

ORDER BY column1 DESC;
8:

  • Đầu tiên, sắp xếp thứ tự kết quả theo các giá trị cột
    ORDER BY column1 ASC;
    9 theo thứ tự tăng dần.
  • Sau đó, sắp xếp thứ tự kết quả theo các giá trị cột
    ORDER BY column1;
    8 theo thứ tự giảm dần. Lưu ý rằng thứ tự của các giá trị trong cột
    ORDER BY column1 ASC;
    9 sẽ không thay đổi trong bước này, chỉ thứ tự của các giá trị trong cột
    ORDER BY column1;
    8 thay đổi.

Khi thực hiện câu lệnh

ORDER BY column1 ASC;
1 với một mệnh đề
ORDER BY column1 DESC;
8, MySQL luôn đánh giá mệnh đề
ORDER BY column1 DESC;
8 sau mệnh đề
ORDER BY
   column1,
   column2;
7 và
ORDER BY column1 ASC;
1:

Ví dụ về ORDER BY trong MySQL

Chúng ta sẽ sử dụng bảng

ORDER BY
   column1,
   column2;
9 từ cơ sở dữ liệu mẫu để minh họa.

Hướng dẫn sắp xếp trong mysql

Sử dụng mệnh đề ORDER BY trong MySQL để sắp xếp kết quả theo một cột

Truy vấn sau sử dụng mệnh đề

ORDER BY column1 DESC;
8 để sắp xếp khách hàng theo họ của họ theo thứ tự tăng dần.

SELECT
	contactLastname,
	contactFirstname
FROM
	customers
ORDER BY
	contactLastname;

Đầu ra:

+-----------------+------------------+
| contactLastname | contactFirstname |
+-----------------+------------------+
| Accorti         | Paolo            |
| Altagar,G M     | Raanan           |
| Andersen        | Mel              |
| Anton           | Carmen           |
| Ashworth        | Rachel           |
| Barajas         | Miguel           |
...

Nếu bạn muốn sắp xếp khách hàng theo họ theo thứ tự giảm dần, bạn sử dụng từ khóa

ORDER BY column1 ASC;
5 sau cột
ORDER BY
    column1 ASC,
    column2 DESC;
2 trong mệnh đề
ORDER BY column1 DESC;
8 như được hiển thị trong truy vấn sau:

SELECT
	contactLastname,
	contactFirstname
FROM
	customers
ORDER BY
	contactLastname DESC;

Đầu ra:

ORDER BY column1 ASC;
0

Sử dụng mệnh đề ORDER BY trong MySQL để sắp xếp kết quả được thiết lập theo nhiều cột

Nếu bạn muốn sắp xếp khách hàng theo họ theo thứ tự giảm dần và sau đó theo tên theo thứ tự tăng dần, bạn chỉ định cả hai từ khóa

ORDER BY column1 ASC;
5 và
ORDER BY column1 ASC;
4 trong các cột tương ứng này như sau:

ORDER BY column1 ASC;
1

Đầu ra:

ORDER BY column1 ASC;
2

Trong ví dụ này, mệnh đề

ORDER BY column1 DESC;
8 sắp xếp kết quả được đặt theo họ theo thứ tự giảm dần trước và sau đó sắp xếp kết quả được sắp xếp theo tên theo thứ tự tăng dần để tạo ra tập kết quả cuối cùng.

Sử dụng mệnh đề ORDER BY trong MySQL để sắp xếp kết quả được đặt bằng một biểu thức

Xem bảng

ORDER BY
    column1 ASC,
    column2 DESC;
7 sau từ cơ sở dữ liệu mẫu.

Hướng dẫn sắp xếp trong mysql

Truy vấn sau đây truy xuất các chi tiết đơn hàng từ bảng

ORDER BY
    column1 ASC,
    column2 DESC;
7. Nó tính toán thành tiền cho từng sản phẩm và sắp xếp tập hợp kết quả dựa trên thành tiền.

ORDER BY column1 ASC;
3

Đầu ra:

ORDER BY column1 ASC;
4

Để làm cho truy vấn dễ đọc hơn, bạn có thể gán biểu thức trong mệnh đề

ORDER BY column1 ASC;
1 một bí danh cột và sử dụng bí danh cột đó trong mệnh đề
ORDER BY column1 DESC;
8 như được hiển thị trong truy vấn sau:

ORDER BY column1 ASC;
5

Đầu ra:

ORDER BY column1 ASC;
6

Trong ví dụ này, chúng ta sử dụng

SELECT
	contactLastname,
	contactFirstname
FROM
	customers
ORDER BY
	contactLastname;
1 làm bí danh cột cho biểu thức  
SELECT
	contactLastname,
	contactFirstname
FROM
	customers
ORDER BY
	contactLastname;
2 và sắp xếp kết quả được sắp xếp theo bí danh
SELECT
	contactLastname,
	contactFirstname
FROM
	customers
ORDER BY
	contactLastname;
1.

Vì MySQL đánh giá mệnh đề

ORDER BY column1 ASC;
1  trước mệnh đề
ORDER BY column1 DESC;
8, bạn có thể sử dụng bí danh cột được chỉ định trong mệnh đề
ORDER BY column1 ASC;
1 trong mệnh đề
ORDER BY column1 DESC;
8.

Sử dụng mệnh đề ORDER BY trong MySQL để sắp xếp dữ liệu bằng danh sách tùy chỉnh

Hàm

SELECT
	contactLastname,
	contactFirstname
FROM
	customers
ORDER BY
	contactLastname;
8 có cú pháp sau:

ORDER BY column1 ASC;
7

Hàm

SELECT
	contactLastname,
	contactFirstname
FROM
	customers
ORDER BY
	contactLastname;
8 trả về vị trí của str trong danh sách str1, str2,…. Nếu str không có trong danh sách, hàm
SELECT
	contactLastname,
	contactFirstname
FROM
	customers
ORDER BY
	contactLastname;
8 trả về 0. Ví dụ : truy vấn sau trả về 1 vì vị trí của chuỗi 'A' là vị trí đầu tiên trong danh sách 'A', 'B','C'.

ORDER BY column1 ASC;
8

Đầu ra:

ORDER BY column1 ASC;
9

Và ví dụ sau trả về 2:

ORDER BY column1 DESC;
0

Đầu ra:

ORDER BY column1 DESC;
1

Hãy lấy một ví dụ thực tế hơn.

Xem bảng

+-----------------+------------------+
| contactLastname | contactFirstname |
+-----------------+------------------+
| Accorti         | Paolo            |
| Altagar,G M     | Raanan           |
| Andersen        | Mel              |
| Anton           | Carmen           |
| Ashworth        | Rachel           |
| Barajas         | Miguel           |
...
1 sau từ cơ sở dữ liệu mẫu.

Hướng dẫn sắp xếp trong mysql

Giả sử rằng bạn muốn sắp xếp các đơn hàng dựa trên trạng thái của chúng theo thứ tự sau:

  • In Process
  • On Hold
  • Canceled
  • Resolved
  • Disputed
  • Shipped

Để làm điều này, bạn có thể sử dụng hàm

SELECT
	contactLastname,
	contactFirstname
FROM
	customers
ORDER BY
	contactLastname;
8 để ánh xạ từng trạng thái đơn hàng thành một số và sắp xếp kết quả theo kết quả của hàm
SELECT
	contactLastname,
	contactFirstname
FROM
	customers
ORDER BY
	contactLastname;
8:

ORDER BY column1 DESC;
2

Đầu ra:

ORDER BY column1 DESC;
3

ORDER BY và NULL trong MySQL

Trong MySQL,

+-----------------+------------------+
| contactLastname | contactFirstname |
+-----------------+------------------+
| Accorti         | Paolo            |
| Altagar,G M     | Raanan           |
| Andersen        | Mel              |
| Anton           | Carmen           |
| Ashworth        | Rachel           |
| Barajas         | Miguel           |
...
4 đứng trước các giá trị không phải NULL. Do đó, khi mệnh đề
ORDER BY column1 DESC;
8 với tùy chọn
ORDER BY column1 ASC;
4,
+-----------------+------------------+
| contactLastname | contactFirstname |
+-----------------+------------------+
| Accorti         | Paolo            |
| Altagar,G M     | Raanan           |
| Andersen        | Mel              |
| Anton           | Carmen           |
| Ashworth        | Rachel           |
| Barajas         | Miguel           |
...
4 xuất hiện đầu tiên trong tập kết quả.

Ví dụ: truy vấn sau sử dụng mệnh đề

ORDER BY column1 DESC;
8 để sắp xếp nhân viên theo các giá trị trong cột
+-----------------+------------------+
| contactLastname | contactFirstname |
+-----------------+------------------+
| Accorti         | Paolo            |
| Altagar,G M     | Raanan           |
| Andersen        | Mel              |
| Anton           | Carmen           |
| Ashworth        | Rachel           |
| Barajas         | Miguel           |
...
9:

ORDER BY column1 DESC;
4

Đầu ra:

ORDER BY column1 DESC;
5

Tuy nhiên, nếu bạn sử dụng

ORDER BY column1 DESC;
8 với tùy chọn
ORDER BY column1 ASC;
5,
+-----------------+------------------+
| contactLastname | contactFirstname |
+-----------------+------------------+
| Accorti         | Paolo            |
| Altagar,G M     | Raanan           |
| Andersen        | Mel              |
| Anton           | Carmen           |
| Ashworth        | Rachel           |
| Barajas         | Miguel           |
...
4 sẽ xuất hiện cuối cùng trong tập kết quả. Ví dụ: