MySQL | ORDER BY
Start your free 7-days trial now!
MySQL's ORDER BY
clause sorts the retrieved records and returns them in ascending order by default. We can specify to sort in descending order if needed.
Syntax
SELECT column_name(s)FROM table_nameORDER BY column1, column2 (DESC);
Examples
Consider the following table about some students:
student_id | fname | lname | day_enrolled | age | username |
---|---|---|---|---|---|
1 | Sky | Towner | 2015-12-03 | 17 | stowner1 |
2 | Ben | Davis | 2016-04-20 | 19 | bdavis2 |
3 | Travis | Apple | 2018-08-14 | 18 | tapple3 |
4 | Arthur | David | 2016-04-01 | 16 | adavid4 |
5 | Benjamin | Town | 2014-01-01 | 17 | btown5 |
The above sample table can be created using the code here.
Ascending Order
To sort students in ascending order of age
:
SELECT * FROM studentsORDER BY age;
+------------+----------+--------+--------------+------+----------+| student_id | fname | lname | day_enrolled | age | username |+------------+----------+--------+--------------+------+----------+| 4 | Arthur | David | 2016-04-01 | 16 | adavid4 || 1 | Sky | Towner | 2015-12-03 | 17 | stowner1 || 5 | Benjamin | Town | 2014-01-01 | 17 | btown5 || 3 | Travis | Apple | 2018-08-14 | 18 | tapple3 || 2 | Ben | Davis | 2016-04-20 | 19 | bdavis2 |+------------+----------+--------+--------------+------+----------+
Descending Order
To sort students in descending order of age
:
SELECT * FROM studentsORDER BY age DESC;
+------------+----------+--------+--------------+------+----------+| student_id | fname | lname | day_enrolled | age | username |+------------+----------+--------+--------------+------+----------+| 2 | Ben | Davis | 2016-04-20 | 19 | bdavis2 || 3 | Travis | Apple | 2018-08-14 | 18 | tapple3 || 1 | Sky | Towner | 2015-12-03 | 17 | stowner1 || 5 | Benjamin | Town | 2014-01-01 | 17 | btown5 || 4 | Arthur | David | 2016-04-01 | 16 | adavid4 |+------------+----------+--------+--------------+------+----------+
Alphabetical Order
To sort students according to the alphabetical order of their first names:
SELECT * FROM studentsWHERE fname is NOT NULLORDER BY fname;
+------------+----------+--------+--------------+------+----------+| student_id | fname | lname | day_enrolled | age | username |+------------+----------+--------+--------------+------+----------+| 4 | Arthur | David | 2016-04-01 | 16 | adavid4 || 2 | Ben | Davis | 2016-04-20 | 19 | bdavis2 || 5 | Benjamin | Town | 2014-01-01 | 17 | btown5 || 1 | Sky | Towner | 2015-12-03 | 17 | stowner1 || 3 | Travis | Apple | 2018-08-14 | 18 | tapple3 |+------------+----------+--------+--------------+------+----------+
Sorting Multiple Columns
To order students according to ascending order of age
and then descending order of fname
for students with same age
:
SELECT * FROM studentsWHERE fname is NOT NULLORDER BY age, fname DESC;
+------------+----------+--------+--------------+------+----------+| student_id | fname | lname | day_enrolled | age | username |+------------+----------+--------+--------------+------+----------+| 4 | Arthur | David | 2016-04-01 | 16 | adavid4 || 1 | Sky | Towner | 2015-12-03 | 17 | stowner1 || 5 | Benjamin | Town | 2014-01-01 | 17 | btown5 || 3 | Travis | Apple | 2018-08-14 | 18 | tapple3 || 2 | Ben | Davis | 2016-04-20 | 19 | bdavis2 |+------------+----------+--------+--------------+------+----------+
Sorting multiple columns makes sense when column entries have duplicate data (in this case both 'Sky'
and 'Benjamin'
are 17
). For 'Sky'
and 'Benjamin'
we then proceed to determine their order according to descending alphabetical order of their fname
, which is why 'Sky'
is returned above 'Benjamin'
.