Order By clause

Prerequisites

For this lab, you must have the “classicmodels” database. If you do not have the classicmodels database setup, click [here](link to download the database script file).

Learning Objectives

This lab will demonstrate how to sort the rows in a result set using the ORDER BY clause. By the end of this lab, learners will be able to use the ORDER BY clause in SQL.

Introduction

When you use the SELECT statement to query data from a table, the order of rows in the result set is unspecified. To sort the rows in the result set, add the ORDER BY clause to the SELECT statement.

Example 1: Sort a result set by an expression.

See the following orderdetails table from the sample database: orderdetails

  • orderNumber

  • productCode

  • quantityOrdered

  • priceEach

  • orderLineNumber

The following query selects the order line items from the orderdetails table. It calculates the subtotal for each line item, and sorts the result based on the subtotal.

SELECT    orderNumber, orderlinenumber, quantityOrdered * priceEach
FROM    orderdetails
ORDER BY   quantityOrdered * priceEach DESC;

Output

orderNumberorderLineNumberquantityOrdered * priceEach

10403

9

11503.14

10405

5

11170.52

10407

2

10723.60

10404

3

10460.16

10312

3

10286.40

To make the query more readable, you can assign an alias to a column in the SELECT statement and use that column alias in the ORDER BY clause:

SELECT
    orderNumber,
    orderLineNumber,
    quantityOrdered * priceEach AS subtotal
FROM    orderdetails
ORDER BY subtotal DESC;

In this example, we use subtotal as the column alias for the expression quantityOrdered * priceEach, and sort the result set by the subtotal alias.

Output

orderNumberorderLineNumbersubtotal

10403

9

11503.14

10405

5

11170.52

10407

2

10723.60

10404

3

10460.16

10312

3

10286.40

Example 2: MySQL ORDER BY and NULL Values

In SQL, NULL comes before non-NULL values. Therefore, when you use the ORDER BY clause with the ASC option, NULLs appear first in the result set.

For example, the following query uses the ORDER BY clause to sort employees by values in the reportsTo column:

SELECT    firstName, lastName, reportsTo
FROM    employees
ORDER BY reportsTo;

Output

firstNamelastNamereportsTo

Diane

Murphy

NULL

Mary

Patterson

1002

Jeff

Firrelli

1002

William

Patterson

1056

Gerard

Bondur

1056

However, if you use the ORDER BY clause with the DESC option, NULLs will appear last in the result set. For example:

SELECT    firstName, lastName, reportsTo
FROM    employees
ORDER BY reportsTo DESC;

Output

firstNamelastNamereportsTo

Mami

Nishi

1056

Mary

Patterson

1002

Jeff

Firrelli

1002

Diane

Murphy

NULL

Summary

  • Use the ORDER BY clause to sort the result set by one or more columns.

  • Use the ASC option to sort the result set in ascending order, and the DESC option to sort the result set in descending order.

  • The ORDER BY clause is evaluated after the FROM and SELECT clauses.

  • In MySQL, NULL is lower than non-NULL values

Last updated