Introduction
In this lesson, you are going to explore how to sort your query results by using SQL’s ORDER BY
statement. Using this phrase allows us to sort our result in ascending or descending order. In addition, you can limit your query to a specified number of results.
The lesson’s objectives are to:
- learn how to sort on one column in ascending or descending order
- sort on two or more columns
- sort on a calculated field
- limit our query to a specified number of results
ORDER BY
In order to sort a query’s results, use the ORDER BY
clause. This clause comes after the FROM
clause and is where you specify columns or expression to use to order your data.
When using the ORDER BY
clause, the select
statement takes the form.
SELECT columns FROM table ORDER BY columns;
So if you wanted to sort people by last name, you could state:
SELECT FirstName,
LastName
FROM Person.Person
ORDER BY LastName
In addition, you can specify the direction to sort. Unless specified, all sorts are in ascending order (smallest to largest) and can be explicitly specified using the ASC
keyword.
SELECT FirstName,
LastName
FROM Person.Person
ORDER BY LastName ASC
To sort by LastName
in descending order, you would issue the statement:
SELECT FirstName,
LastName
FROM Person.Person
ORDER BY LastName DESC
DESC
stand for Descending.
ORDER BY More than One Column
You can also order by more than one column. Just separate the columns you wish to sort with a comma. If you wanted to sort PurchaseOrderDetail
by OrderQty
and UnitPrice
, enter:
SELECT PurchaseOrderID,
OrderQty,
UnitPrice
FROM Purchasing.PurchaseOrderDetail
ORDER BY OrderQty, UnitPrice
You can also specify the sort order, that is whether the columns are sorted in ascending or descending order. In this sample, the PurchaseOrderDetails
are sorted in descending order by price within quantity.
SELECT PurchaseOrderID,
OrderQty,
UnitPrice
FROM Purchasing.PurchaseOrderDetail
ORDER BY OrderQty ASC, UnitPrice DESC
ORDER BY A Calculated Value
So far, you have learned to sort on one or more columns, but did you know you can sort on an expression? For instance, consider PurchaseOrderDetail
, perhaps you would like to know who has largest orders. Of course, you can sort by Quantity
or UnitPrice
, but what about TotalPrice
? That column doesn’t exist in the table, be we learned how to create it as an expression in our last lesson. Can we sort on this?
Sure!
Check out the following, and look closely at the ORDER BY
clause, there you’ll see where it’s ordered by TotalPrice (UnitPrice * Quantity)
.
SELECT PurchaseOrderID,
UnitPrice,
OrderQty
FROM Purchasing.PurchaseOrderDetail
ORDER BY UnitPrice * OrderQty
To make it more clear, let's also display the TotalPrice
.
SELECT PurchaseOrderID,
UnitPrice,
OrderQty,
UnitPrice * OrderQty AS TotalPrice
FROM Purchasing.PurchaseOrderDetail
ORDER BY UnitPrice * OrderQty
And here is where aliasing, or renaming fields, can help. Here UnitPrice * OrderQty
is aliased as TotalPrice
in the SELECT
clause. Now that’s done, we can simply refer to TotalPrice
when specifying the sort order.
SELECT PurchaseOrderID,
UnitPrice,
OrderQty,
UnitPrice * OrderQty AS TotalPrice
FROM Purchasing.PurchaseOrderDetail
ORDER BY TotalPrice
Get TOP Results
The last item I would like to go over with you is being able to limit the number of sorted results returned from a list. This makes it really easy to return the “first ten” or “top ten” items in a search. For instance, if you want to know the top five PurchaseOrderDetail
items, you could enter the following query into SSMS:
SELECT TOP 5 PurchaseOrderID,
UnitPrice,
OrderQty,
UnitPrice * OrderQty AS TotalPrice
FROM Purchasing.PurchaseOrderDetail
ORDER BY TotalPrice
The TOP
keyword limits our search to the first five rows. You can limit by other numbers of course, in fact you can also limit by any number resulting from an expression.
Tip! To get the last five rows of a result, such as the smallest five orders, just order your result in descending order.
Exercises
It’s important to practice! Use the sample database to answer these questions.
- Write a statement to select
Employee NationalIDNumbrer
, MaritalStatus
, BirthDate
and JobTitle
, sorted by BirthDate
. - Write a statement to select
Person
first and last names ordered by the upper case equivalent of their last name. Remember: We discussed UPPER
in the previous lesson. - Select the first two names to appear in a sort of
Person LastNames
. - Select the last two names to appear in a sort of
Person LastNames
.
Answers to the Exercises
Congratulations! You just learned how to use the select
command to query a database. More tutorials are to follow!
Remember! I want to remind you all that if you have other questions you want answered, then post a comment or tweet me. I’m here to help you.
What other topics would you like to know more about?