概要: このチュートリアルでは、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
オプションを使用します。