MySQLのORDER BYキーワード
1. MySQLのORDER BYキーワードとは
ORDER BYキーワードは、リザルトセット(結果テーブル)を昇順または降順でソート(並び替え)するために使用されます。
デフォルトでは、ORDER BYキーワードはレコードを昇順(ASC)でソートします。
1.1 ORDER BYの構文
SELECT column1, column2, ...
FROM table_name
ORDER BY column1, column2, ... ASC|DESC;- ASC: 昇順(小さい順)。デフォルトのため省略可能です。
- DESC: 降順(大きい順)。
2. デモ用データベース(Productsテーブル)
本セクションでは、Northwindサンプルデータベースの「Products」テーブルから抜粋したデータを使用します。
| ProductID | ProductName | SupplierID | CategoryID | Unit | UnitPrice |
|---|---|---|---|---|---|
| 1 | Chais | 1 | 1 | 10 boxes x 20 bags | 18.00 |
| 2 | Chang | 1 | 1 | 24 - 12 oz bottles | 19.00 |
| 3 | Aniseed Syrup | 1 | 2 | 12 - 550 ml bottles | 10.00 |
| 4 | Chef Anton's Cajun Seasoning | 2 | 2 | 48 - 6 oz jars | 22.00 |
| 5 | Chef Anton's Gumbo Mix | 2 | 2 | 36 boxes | 21.35 |
2.1 ORDER BYの使用例(昇順)
以下のSQLは、製品を価格(Price)の安い順(昇順)にソートします。
/* 価格の低い順に製品をソートして取得 */
SELECT * FROM Products
ORDER BY Price;3. 降順でのソート(ORDER BY DESC)
レコードを降順でソートするには、DESCキーワードを使用します。
3.1 降順ソートの例
以下のSQLは、製品を価格の高い順(降順)にソートします。
/* 価格の高い順に製品をソートして取得 */
SELECT * FROM Products
ORDER BY Price DESC;4. デモ用データベース(Customersテーブル)
次に、同じくNorthwindデータベースの「Customers」テーブルのデータを見てみましょう。
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 1 | Alfreds Futterkiste | Maria Anders | Obere Str. 57 | Berlin | 12209 | Germany |
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 | Around the Horn | Thomas Hardy | 120 Hanover Sq. | London | WA1 1DP | UK |
| 5 | Berglunds snabbköp | Christina Berglund | Berguvsvägen 8 | Luleå | S-958 22 | Sweden |
5. 実践的なソートの例
5.1 単一カラムによるソート
以下のSQLは、「Customers」テーブルの全データを取得し、「Country(国)」カラムでソートします。
/* 国名(アルファベット順)で顧客をソート */
SELECT * FROM Customers
ORDER BY Country;5.2 降順によるソート
以下のSQLは、国名(Country)を基準に降順でソートして取得します。
/* 国名の逆順(Z to A)で顧客をソート */
SELECT * FROM Customers
ORDER BY Country DESC;5.3 複数カラムによるソート
複数のカラムを指定してソートすることも可能です。以下のSQLは、まず「Country(国)」でソートし、同じ国の中に複数のレコードがある場合はさらに「CustomerName(顧客名)」でソートします。
/* 最初に国名でソートし、同じ国の場合はさらに顧客名でソート */
SELECT * FROM Customers
ORDER BY Country, CustomerName;5.4 ASCとDESCの組み合わせ
カラムごとに異なるソート順を指定することもできます。以下のSQLは、「Country」を昇順で、「CustomerName」を降順でソートします。
/* 国名は昇順、顧客名は降順でソートして取得 */
SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;