MySQL 速習チュートリアル

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」テーブルから抜粋したデータを使用します。

ProductIDProductNameSupplierIDCategoryIDUnitUnitPrice
1Chais1110 boxes x 20 bags18.00
2Chang1124 - 12 oz bottles19.00
3Aniseed Syrup1212 - 550 ml bottles10.00
4Chef Anton's Cajun Seasoning2248 - 6 oz jars22.00
5Chef Anton's Gumbo Mix2236 boxes21.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」テーブルのデータを見てみましょう。

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F.05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico
4Around the HornThomas Hardy120 Hanover Sq.LondonWA1 1DPUK
5Berglunds snabbköpChristina BerglundBerguvsvägen 8LuleåS-958 22Sweden

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;