1. Introduction
MySQL is a widely used relational database for web applications and database management. Among its many features, the ORDER BY
clause is an essential tool for organizing retrieved data based on specific criteria. In this article, we will explain the basics of the ORDER BY
clause, sorting by multiple columns, handling NULL
values, and optimizing performance. To make it easier to understand, we will include concrete examples and visual tables.
2. Basic Syntax of the ORDER BY Clause
The ORDER BY
clause is used to sort data retrieved from a database in ascending (ASC
) or descending (DESC
) order. By specifying the target column for sorting, you can present data in a more organized manner.
Basic Syntax
SELECT * FROM table_name
ORDER BY column_name ASC | DESC;
- Ascending (ASC): Sorts values from smallest to largest. If no keyword is specified,
ASC
is the default. - Descending (DESC): Sorts values from largest to smallest.
Example
The following query sorts customer data by age in ascending order:
SELECT * FROM customers
ORDER BY age ASC;
Figure 1: Customer data before sorting
Name | Age | Address |
---|---|---|
Yamada | 40 | Tokyo |
Sato | 25 | Osaka |
Suzuki | 35 | Nagoya |
Figure 2: Customer data after sorting
Name | Age | Address |
---|---|---|
Sato | 25 | Osaka |
Suzuki | 35 | Nagoya |
Yamada | 40 | Tokyo |
Important Note
The ORDER BY
clause must appear at the end of a SELECT
statement. If other clauses such as WHERE
or GROUP BY
are used, ORDER BY
comes after them.

3. Sorting by Multiple Columns
The ORDER BY
clause allows sorting by multiple columns, enabling more fine-grained organization. For example, if two rows share the same value in the first column, the second column is used as a tiebreaker.
Syntax Example
SELECT * FROM table_name
ORDER BY column1 ASC, column2 DESC;
Practical Example
The following query sorts customers by address in descending order and then by age in ascending order:
SELECT * FROM customers
ORDER BY address DESC, age ASC;
Figure 3: Result of multi-column sorting
Name | Address | Age |
---|---|---|
Yamada | Tokyo | 40 |
Sato | Osaka | 25 |
Suzuki | Nagoya | 35 |
This way, the data is first sorted by address
in descending order. If multiple customers share the same address, they are sorted by age
in ascending order.
4. Handling NULL Values
In SQL, a NULL
value means “no value exists.” When using the ORDER BY
clause, NULL
values are treated in a special way. With ASC
, NULL
values appear first, while with DESC
, they appear last.
NULL
Value Behavior
- Ascending (ASC):
NULL
values are shown first. - Descending (DESC):
NULL
values are shown last.
Example
The following query shows products with NULL
prices first, followed by the rest in ascending order:
SELECT * FROM products
ORDER BY price ASC;
Figure 4: Sorting results with NULL
values
Product | Price |
---|---|
Product A | NULL |
Product B | 1000 |
Product C | 2000 |
How to Display NULL Values Last
If you want NULL
values to appear last, you can use the ISNULL()
function.
SELECT * FROM products
ORDER BY ISNULL(price), price ASC;

5. Combining ORDER BY with WHERE
By combining the WHERE
clause with ORDER BY
, you can filter records that match specific conditions and then sort them. This helps organize and display data more efficiently.
Basic Syntax
SELECT * FROM table_name
WHERE condition
ORDER BY column_name ASC | DESC;
Example
The following query selects customers aged 30 or older and sorts them by name in ascending order:
SELECT * FROM customers
WHERE age >= 30
ORDER BY name ASC;
This query filters the data first, then applies sorting.
6. Using ORDER BY with GROUP BY
The GROUP BY
clause groups data by a specific column, and the ORDER BY
clause can then be used to sort the grouped results.
Example
The following query counts customers by region and sorts the result in descending order:
SELECT region, COUNT(*)
FROM customers
GROUP BY region
ORDER BY COUNT(*) DESC;
Figure 5: Sorted aggregation results
Region | Customer Count |
---|---|
Tokyo | 50 |
Osaka | 30 |
Nagoya | 20 |

7. Advanced ORDER BY: Sorting Dates and Strings
The ORDER BY
clause can also sort date and string columns. For example, it is useful for displaying the most recent records first or sorting alphabetically.
Sorting by Date
SELECT * FROM orders
ORDER BY order_date DESC;
This query displays the latest orders first.
Sorting by Strings
The following query sorts employee names alphabetically:
SELECT * FROM employees
ORDER BY name ASC;
8. Performance Optimization for ORDER BY
Sorting large datasets can affect performance. Here are techniques to optimize queries that use ORDER BY
.
Using Indexes
Adding an index to the column being sorted can improve query performance:
CREATE INDEX idx_column_name ON table_name(column_name);
Using LIMIT with ORDER BY
The LIMIT
clause restricts the number of rows returned after sorting, reducing execution time and processing costs:
SELECT * FROM customers
ORDER BY age ASC
LIMIT 10;
Handling Large Datasets
For very large datasets, adjusting MySQL settings can improve performance. For example, increasing the sort_buffer_size
allows more memory to be used for sorting:
SET GLOBAL sort_buffer_size = 2M;
It is also important to use EXPLAIN
to review the query execution plan and identify optimization opportunities:
EXPLAIN SELECT * FROM customers ORDER BY age ASC;

9. Summary
In this article, we covered MySQL’s ORDER BY
clause from basics to advanced use cases. The ORDER BY
clause is crucial for organizing data and can handle ascending/descending order, multi-column sorting, and special cases like NULL
values.
We also discussed performance optimization, including the use of indexes, LIMIT
, and adjusting sort_buffer_size
to handle large datasets more efficiently.
By mastering the ORDER BY
clause, you can sort data effectively and enhance the performance of both applications and databases. Be sure to apply these techniques in real-world projects.
Practical Use Cases for ORDER BY
Here are some common scenarios where ORDER BY
is essential in practice:
- Generating Reports:
For example, when creating sales reports, you can sort products by revenue or list regional sales performance in order. - Implementing Pagination:
In web applications, you can useORDER BY
withLIMIT
to display sorted data across multiple pages efficiently. - Database Cleanup:
When deleting old records or retrieving specific entries for maintenance,ORDER BY
makes it easy to identify and manage the right data.
These are common everyday use cases where the ORDER BY
clause can greatly improve data organization and workflow efficiency.