Mệnh đề ORDER BY trong SQL

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:

IDNONAMEBIRTHDAYSEXADDRESSSCORES
1100kumori1991-01-01namfukuoka5000
2101yamada1991-02-01nunagasaki6000
3102takata1995-05-20namtokyo4000
4103yoshida1991-05-30namosaka6000
5104ishibashi1998-06-01nukumamoto7000
6105toyota1997-02-09nuyamaguchi8000
7106tokuda1994-02-24namfukuoka9000
8107takeshima1993-05-04namnagasaki8000
9108takai1992-08-12namosaka9000
10109murakami1992-01-02nutokyo5000

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

IDNONAMEBIRTHDAYSEXADDRESSSCORES
1100kumori1991-01-01namfukuoka5000
7106tokuda1994-02-24namfukuoka9000
5104ishibashi1998-06-01nukumamoto7000
2101yamada1991-02-01nunagasaki6000
8107takeshima1993-05-04namnagasaki8000
4103yoshida1991-05-30namosaka6000
9108takai1992-08-12namosaka9000
3102takata1995-05-20namtokyo4000
10109murakami1992-01-02nutokyo5000
6105toyota1997-02-09nuyamaguchi8000

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

IDNONAMEBIRTHDAYSEXADDRESSSCORES
7106tokuda1994-02-24namfukuoka9000
9108takai1992-08-12namosaka9000
6105toyota1997-02-09nuyamaguchi8000
8107takeshima1993-05-04namnagasaki8000
5104ishibashi1998-06-01nukumamoto7000
2101yamada1991-02-01nunagasaki6000
4103yoshida1991-05-30namosaka6000
1100kumori1991-01-01namfukuoka5000
10109murakami1992-01-02nutokyo5000
3102takata1995-05-20namtokyo4000

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

IDNONAMEBIRTHDAYSEXADDRESSSCORES
10109murakami1992-01-02nutokyo5000
3102takata1995-05-20namtokyo4000
9108takai1992-08-12namosaka9000
4103yoshida1991-05-30namosaka6000
7106tokuda1994-02-24namfukuoka9000
1100kumori1991-01-01namfukuoka5000
6105toyota1997-02-09nuyamaguchi8000
8107takeshima1993-05-04namnagasaki8000
5104ishibashi1998-06-01nukumamoto7000
2101yamada1991-02-01nunagasaki6000

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.

Bình luận về bài viết này