Mệnh đề ORDER BY trong SQL được sử dụng để sắp xếp dữ liệu theo thứ tự tăng dần hoặc giảm dần, dựa trên một hoặc nhiều cột. Một số cơ sở dữ liệu sắp xếp các kết quả truy vấn theo thứ tự tăng dần theo mặc định. Lệnh ASC được sử dụng để sắp xếp tăng dần và DESC được sử dụng để sắp xếp giảm dần.
Cú pháp
Cú pháp cơ bản của mệnh đề ORDER BY như sau:
SELECT column
FROM table_name
WHERE condition
ORDER BY column1, column2, .. columnN [ASC | DESC];
Bạn có thể sử dụng nhiều hơn một cột trong mệnh đề ORDER BY. Đảm bảo rằng bất kỳ cột bạn đang sử dụng để sắp xếp cột đó phải nằm trong danh sách cột.
Ví dụ
Giả sử bảng STUDENT có các bản ghi sau đây:
ID | NO | NAME | BIRTHDAY | SEX | ADDRESS | SCORES |
1 | 100 | kumori | 1991-01-01 | nam | fukuoka | 5000 |
2 | 101 | yamada | 1991-02-01 | nu | nagasaki | 6000 |
3 | 102 | takata | 1995-05-20 | nam | tokyo | 4000 |
4 | 103 | yoshida | 1991-05-30 | nam | osaka | 6000 |
5 | 104 | ishibashi | 1998-06-01 | nu | kumamoto | 7000 |
6 | 105 | toyota | 1997-02-09 | nu | yamaguchi | 8000 |
7 | 106 | tokuda | 1994-02-24 | nam | fukuoka | 9000 |
8 | 107 | takeshima | 1993-05-04 | nam | nagasaki | 8000 |
9 | 108 | takai | 1992-08-12 | nam | osaka | 9000 |
10 | 109 | murakami | 1992-01-02 | nu | tokyo | 5000 |
Sắp xếp kết quả theo thứ tự tăng dần bởi các trường ADDRESS và SCORES:
SELECT * FROM STUDENT
ORDER BY ADDRESS, SCORES;
Kết quả:
ID | NO | NAME | BIRTHDAY | SEX | ADDRESS | SCORES |
1 | 100 | kumori | 1991-01-01 | nam | fukuoka | 5000 |
7 | 106 | tokuda | 1994-02-24 | nam | fukuoka | 9000 |
5 | 104 | ishibashi | 1998-06-01 | nu | kumamoto | 7000 |
2 | 101 | yamada | 1991-02-01 | nu | nagasaki | 6000 |
8 | 107 | takeshima | 1993-05-04 | nam | nagasaki | 8000 |
4 | 103 | yoshida | 1991-05-30 | nam | osaka | 6000 |
9 | 108 | takai | 1992-08-12 | nam | osaka | 9000 |
3 | 102 | takata | 1995-05-20 | nam | tokyo | 4000 |
10 | 109 | murakami | 1992-01-02 | nu | tokyo | 5000 |
6 | 105 | toyota | 1997-02-09 | nu | yamaguchi | 8000 |
Bây giờ sắp xếp kết quả theo thứ tự giảm dần bởi trường SCORES:
SELECT * FROM STUDENT
ORDER BY SCORES DESC;
Kết quả:
ID | NO | NAME | BIRTHDAY | SEX | ADDRESS | SCORES |
7 | 106 | tokuda | 1994-02-24 | nam | fukuoka | 9000 |
9 | 108 | takai | 1992-08-12 | nam | osaka | 9000 |
6 | 105 | toyota | 1997-02-09 | nu | yamaguchi | 8000 |
8 | 107 | takeshima | 1993-05-04 | nam | nagasaki | 8000 |
5 | 104 | ishibashi | 1998-06-01 | nu | kumamoto | 7000 |
2 | 101 | yamada | 1991-02-01 | nu | nagasaki | 6000 |
4 | 103 | yoshida | 1991-05-30 | nam | osaka | 6000 |
1 | 100 | kumori | 1991-01-01 | nam | fukuoka | 5000 |
10 | 109 | murakami | 1992-01-02 | nu | tokyo | 5000 |
3 | 102 | takata | 1995-05-20 | nam | tokyo | 4000 |
Ngoài ra để sắp xếp theo thứ tự ưu tiên của riêng mình, các bạn có thể gán cho trường muốn ưu tiên giá trị bằng cách kết hợp với mệnh đề CASE, ví dụ mình muốn sắp xếp cho các ông ở tokyo đứng đầu tiên sau đó đến osaka, tiếp theo là fukuoka và cuối cùng là các tỉnh còn lại. Các trường ADDRESS sẽ sắp xếp theo thứ tự tăng dần và SCORES sẽ theo thứ tự giảm dần.
SELECT * FROM STUDENT
ORDER BY (
CASE ADDRESS
WHEN 'tokyo' THEN 1
WHEN 'osaka' THEN 2
WHEN 'fukuoka' THEN 3
ELSE 10 END) ASC, SCORES DESC;
Kết quả:
ID | NO | NAME | BIRTHDAY | SEX | ADDRESS | SCORES |
10 | 109 | murakami | 1992-01-02 | nu | tokyo | 5000 |
3 | 102 | takata | 1995-05-20 | nam | tokyo | 4000 |
9 | 108 | takai | 1992-08-12 | nam | osaka | 9000 |
4 | 103 | yoshida | 1991-05-30 | nam | osaka | 6000 |
7 | 106 | tokuda | 1994-02-24 | nam | fukuoka | 9000 |
1 | 100 | kumori | 1991-01-01 | nam | fukuoka | 5000 |
6 | 105 | toyota | 1997-02-09 | nu | yamaguchi | 8000 |
8 | 107 | takeshima | 1993-05-04 | nam | nagasaki | 8000 |
5 | 104 | ishibashi | 1998-06-01 | nu | kumamoto | 7000 |
2 | 101 | yamada | 1991-02-01 | nu | nagasaki | 6000 |
Kết quả cho thấy các bản ghi được sắp xếp theo thứ tự tăng dần của trường ADDRESS sau đó mới đến thứ giảm dần của trường SCORES.