概要: このチュートリアルでは、SQLのORDER BY句を使用して、指定された基準に基づいて結果セットを昇順または降順に並べ替える方法について説明します。
SQL ORDER BY句の概要
ORDER BYは、SELECTステートメントのオプションの句です。ORDER BY句を使用すると、SELECT句によって返される行を、1つ以上のソート式で昇順または降順に並べ替えることができます。
以下は、ORDER BY句の構文を示します。
SELECT
select_list
FROM
table_name
ORDER BY
sort_expression [ASC | DESC];Code language: SQL (Structured Query Language) (sql)この構文では
- まず、
ORDER BY句をFROM句の後に配置します。データベースは、FROM>SELECT>ORDER BYの順序でORDER BY句を含むSELECTステートメントを評価します。 - 次に、
ORDER BY句の後にソート式を指定します。ソート式は、ソートの基準を指定します。 - 3番目に、
ASCオプションを使用して、結果セットをソート式で昇順に並べ替え、DESCを使用して、結果セットをソート式で降順に並べ替えます。
ASCまたはDESCのいずれも指定しない場合、ORDER BY句はデフォルトでASCオプションを使用することに注意してください。
ORDER BY句では、複数の式で結果セットをソートすることもできます。この場合、2つのソート式をコンマで区切る必要があります。
SELECT
select_list
FROM
table_name
ORDER BY
sort_expression_1 [ASC | DESC],
sort_expression_2 [ASC | DESC];Code language: CSS (css)この構文では、ORDER BY句は最初にsort_expression_1で結果セットをソートし、次にソートされた結果セットをsort_expression_2でソートします。
ORDER BY句を指定しない場合、SELECTステートメントは結果セットをソートしないことに注意してください。つまり、結果セットの行には特定の順序がありません。
SQL ORDER BY句の例
例として、サンプルデータベースのemployeesテーブルを使用します。

1)SQL ORDER BY句を使用して1つの列の値をソートする例
次のSELECTステートメントは、employeesテーブルの従業員ID、名、姓、採用日、および給与の列からデータを返します。
SELECT
employee_id,
first_name,
last_name,
hire_date,
salary
FROM
employees;Code language: SQL (Structured Query Language) (sql)+-------------+-------------+-------------+------------+----------+
| employee_id | first_name | last_name | hire_date | salary |
+-------------+-------------+-------------+------------+----------+
| 100 | Steven | King | 1987-06-17 | 24000.00 |
| 101 | Neena | Kochhar | 1989-09-21 | 17000.00 |
| 102 | Lex | De Haan | 1993-01-13 | 17000.00 |
| 103 | Alexander | Hunold | 1990-01-03 | 9000.00 |
| 104 | Bruce | Ernst | 1991-05-21 | 6000.00 |
| 105 | David | Austin | 1997-06-25 | 4800.00 |
| 106 | Valli | Pataballa | 1998-02-05 | 4800.00 |
| 107 | Diana | Lorentz | 1999-02-07 | 4200.00 |
| 108 | Nancy | Greenberg | 1994-08-17 | 12000.00 |
| 109 | Daniel | Faviet | 1994-08-16 | 9000.00 |
| 110 | John | Chen | 1997-09-28 | 8200.00 |
...出力から明確にわかるように、行には順序がありません。
次の例では、ORDER BY句を使用して、従業員を名のアルファベット順にソートします。
SELECT
employee_id,
first_name,
last_name,
hire_date,
salary
FROM
employees
ORDER BY
first_name;Code language: SQL (Structured Query Language) (sql)+-------------+-------------+-------------+------------+----------+
| employee_id | first_name | last_name | hire_date | salary |
+-------------+-------------+-------------+------------+----------+
| 121 | Adam | Fripp | 1997-04-10 | 8200.00 |
| 115 | Alexander | Khoo | 1995-05-18 | 3100.00 |
| 103 | Alexander | Hunold | 1990-01-03 | 9000.00 |
| 193 | Britney | Everett | 1997-03-03 | 3900.00 |
| 104 | Bruce | Ernst | 1991-05-21 | 6000.00 |
| 179 | Charles | Johnson | 2000-01-04 | 6200.00 |
| 109 | Daniel | Faviet | 1994-08-16 | 9000.00 |
| 105 | David | Austin | 1997-06-25 | 4800.00 |
| 114 | Den | Raphaely | 1994-12-07 | 11000.00 |
| 107 | Diana | Lorentz | 1999-02-07 | 4200.00 |
...ORDER BYは、first_name列の値で行をソートします。
2)SQL ORDER BY句を使用して複数の列の値をソートする例
次の例では、ORDER BY句を使用して、従業員を名で昇順に、姓で降順にソートします。
SELECT
employee_id,
first_name,
last_name,
hire_date,
salary
FROM
employees
ORDER BY
first_name,
last_name DESC;Code language: SQL (Structured Query Language) (sql)+-------------+-------------+-------------+------------+----------+
| employee_id | first_name | last_name | hire_date | salary |
+-------------+-------------+-------------+------------+----------+
| 121 | Adam | Fripp | 1997-04-10 | 8200.00 |
| 115 | Alexander | Khoo | 1995-05-18 | 3100.00 |
| 103 | Alexander | Hunold | 1990-01-03 | 9000.00 |
| 193 | Britney | Everett | 1997-03-03 | 3900.00 |
| 104 | Bruce | Ernst | 1991-05-21 | 6000.00 |
| 179 | Charles | Johnson | 2000-01-04 | 6200.00 |
| 109 | Daniel | Faviet | 1994-08-16 | 9000.00 |
| 105 | David | Austin | 1997-06-25 | 4800.00 |
| 114 | Den | Raphaely | 1994-12-07 | 11000.00 |
| 107 | Diana | Lorentz | 1999-02-07 | 4200.00 |
| 118 | Guy | Himuro | 1998-11-15 | 2600.00 |
...この例では、ORDER BY句は、結果セットを名で昇順にソートし、次にソートされた結果セットを姓で降順にソートします。
結果セットの2人の従業員:Alexander KhooとAlexander Hunoldの位置の変化に注意してください。
3)SQL ORDER BY句を使用して数値列の値をソートする例
次の例では、ORDER BY句を使用して、従業員を給与の高い順にソートします。
SELECT
employee_id,
first_name,
last_name,
hire_date,
salary
FROM
employees
ORDER BY
salary DESC;Code language: SQL (Structured Query Language) (sql)+-------------+-------------+-------------+------------+----------+
| employee_id | first_name | last_name | hire_date | salary |
+-------------+-------------+-------------+------------+----------+
| 100 | Steven | King | 1987-06-17 | 24000.00 |
| 101 | Neena | Kochhar | 1989-09-21 | 17000.00 |
| 102 | Lex | De Haan | 1993-01-13 | 17000.00 |
| 145 | John | Russell | 1996-10-01 | 14000.00 |
| 146 | Karen | Partners | 1997-01-05 | 13500.00 |
| 201 | Michael | Hartstein | 1996-02-17 | 13000.00 |
| 205 | Shelley | Higgins | 1994-06-07 | 12000.00 |
| 108 | Nancy | Greenberg | 1994-08-17 | 12000.00 |
| 114 | Den | Raphaely | 1994-12-07 | 11000.00 |
...4)SQL ORDER BYを使用して日付でソートする例
文字データおよび数値データに加えて、ORDER BY句を使用して、行を日付でソートできます。たとえば、次のステートメントでは、ORDER BY句を使用して、hire_date列の値で従業員をソートします。
SELECT
employee_id,
first_name,
last_name,
hire_date,
salary
FROM
employees
ORDER BY
hire_date;Code language: SQL (Structured Query Language) (sql)+-------------+-------------+-------------+------------+----------+
| employee_id | first_name | last_name | hire_date | salary |
+-------------+-------------+-------------+------------+----------+
| 100 | Steven | King | 1987-06-17 | 24000.00 |
| 200 | Jennifer | Whalen | 1987-09-17 | 4400.00 |
| 101 | Neena | Kochhar | 1989-09-21 | 17000.00 |
| 103 | Alexander | Hunold | 1990-01-03 | 9000.00 |
| 104 | Bruce | Ernst | 1991-05-21 | 6000.00 |
| 102 | Lex | De Haan | 1993-01-13 | 17000.00 |
| 203 | Susan | Mavris | 1994-06-07 | 6500.00 |
| 204 | Hermann | Baer | 1994-06-07 | 10000.00 |
...会社に最近入社した従業員から最も古い順に表示するには、従業員を採用日で降順にソートします。
SELECT
employee_id,
first_name,
last_name,
hire_date,
salary
FROM
employees
ORDER BY
hire_date DESC;Code language: SQL (Structured Query Language) (sql)+-------------+-------------+-------------+------------+----------+
| employee_id | first_name | last_name | hire_date | salary |
+-------------+-------------+-------------+------------+----------+
| 179 | Charles | Johnson | 2000-01-04 | 6200.00 |
| 113 | Luis | Popp | 1999-12-07 | 6900.00 |
| 119 | Karen | Colmenares | 1999-08-10 | 2500.00 |
| 178 | Kimberely | Grant | 1999-05-24 | 7000.00 |
| 107 | Diana | Lorentz | 1999-02-07 | 4200.00 |
| 118 | Guy | Himuro | 1998-11-15 | 2600.00 |
| 126 | Irene | Mikkilineni | 1998-09-28 | 2700.00 |
| 177 | Jack | Livingston | 1998-04-23 | 8400.00 |
| 176 | Jonathon | Taylor | 1998-03-24 | 8600.00 |
...まとめ
SELECT句によって返された行をソートするには、ORDER BY句を使用します。- 行を昇順にソートするには
ASCオプションを使用し、行を降順にソートするにはDESCオプションを使用します。