で注文してください MySQL: ASC & DESC クエリの例
⚡ スマートサマリー
で注文してください MySQL クエリ結果セットを、ASC および DESC キーワードを使用して昇順または降順でソートします。以下のセクションでは、構文、単一列および複数列のソート、NULL の配置、および myflixdb サンプルデータベースに対して実行された実行例について説明します。

ORDER BYとは何ですか MySQL?
MySQL ORDER BY は、SELECT クエリで使用してデータを順序よく並べ替える句です。 MySQL ORDER BY句は、クエリ結果セットを、1つの列または複数の列に基づいて、昇順または降順に並べ替えます。
SELECTコマンドを単独で使用した場合、行はストレージエンジンが読み取った順序で返されますが、これは必ずしも正しい順序とは限りません。ソートとは、これらの行を指定された順序に並べ替えることです。ソートは、数値、文字列、日付など、あらゆるデータ型に対して実行できます。
MySQL ORDER BY構文
例を見る前に、SELECT文全体の中でその句がどこに配置されるのかを確認しておくと役立ちます。
SELECT statement... [WHERE condition | GROUP BY `field_name(s)` HAVING condition] ORDER BY `field_name(s)` [ASC | DESC];
Pr_media
- SELECTステートメント... " これは通常のSELECTクエリです。
- 」| 「「 代替案を表す。
- 「[WHERE condition | GROUP BY `field_name(s)` HAVING condition]」 これは、クエリ結果セットをフィルタリングするために使用されるオプションの条件です。
- 「ご注文」 クエリ結果セットのソートを実行します。
- 「[ASC | 説明]” は、結果セットを昇順または降順でソートするために使用されるキーワードです。 ASC デフォルトです。
DESC キーワードと ASC キーワードとは何ですか?
ORDER BY 句で指定できる並べ替え方向は、ASC と DESC の 2 つです。以下の表は、最も頻繁に並べ替えを行うデータ型について、これらの並べ替え方向を比較したものです。
ASC は昇順の短縮形です |
MySQL DESC は降順の短縮形です |
|---|---|
| これは、クエリ結果を上から下のスタイルで並べ替えるために使用されます。 | これは、クエリ結果を下から上に並べ替えるために使用されます。 |
| 日付データ型を操作する場合、最も古い日付がリストの先頭に表示されます。 | 日付データ型を扱う場合、最新の日付がリストの一番上に表示されます。 |
| 数値データ型を操作する場合、最小値がリストの一番上に表示されます。 | 数値データ型を扱う場合、クエリ結果セットの一番上に最も高い値が表示されます。 |
| 文字列データ型を使用する場合、クエリ結果セットは、文字 A で始まり文字 Z までの順に並べ替えられます。 | 文字列データ型を使用する場合、クエリ結果セットは、文字 Z で始まり文字 A までの順に並べ替えられます。 |
SQL DESC および ASC キーワードはどちらも SELECT ステートメントと組み合わせて使用されます。 MySQL ORDER BY 句。
DESCとASCの構文
SQL DESC ソート キーワードの基本構文は次のとおりです。
SELECT {fieldName(s) | *} FROM tableName(s) [WHERE condition] ORDER BY fieldname(s) ASC | DESC [LIMIT N];
Pr_media
- SELECT {フィールド名 | *} FROM テーブル名 これは、結果セットを取得するフィールドとテーブルを含むステートメントです。
- [WHERE条件] はオプションですが、指定された条件に従ってデータをフィルタリングするために使用できます。
- 並べ替え基準:フィールド名 は必須であり、ソートを実行するフィールドを指定します。 MySQL DESCキーワードは、降順でソートすることを指定します。
- [制限N] これはオプションですが、クエリ結果セットから返される行数を制限するために使用できます。
DESCとASCを使用する理由 MySQL?
構文を知っているだけでは十分ではありません。ORDER BY句が存在する理由は、データベースが簡単に生成できる結果セットが、必ずしも人間にとって読みやすいとは限らないからです。
ビデオライブラリーの会員の支払い履歴を印刷して、受付担当者が問い合わせに迅速に対応できるようにするとします。この場合、最新の支払いから始まり、最も古い支払いまでを時系列順に並べる降順で印刷するのがはるかに合理的です。SQLのDESCキーワードは、このような状況で非常に役立ちます。なぜなら、支払い日を基準にリストを並べ替えることができるからです。
さて、マーケティング部門が、会員がレンタル前に図書館の所蔵作品を確認できるよう、映画をカテゴリー別に一覧表示したいとしましょう。カテゴリー名と映画タイトルを昇順に並べ替えることで、会員は索引のように素早く情報を検索できます。ASCキーワードはまさにこの目的のために使われます。
つまり、ORDER BY句は生の検索結果セットをレポートに変換します。選択するキーワードは、読者が尋ねている質問によって異なります。 ごく最近何が起こったのか DESC を要求し、 この商品はどこで入手できますか? ASCへの要請。
MySQL 並べ替え例
以下の例はすべて、myflixdb サンプルデータベースに対して実行されます。まずは、デフォルトの順序で返される、ソートされていないメンバーテーブルから始めます。
SELECT * FROM members;
上記のスクリプトを実行すると、 MySQL myflixdbに対するWorkbenchの実行結果は、以下に示すとおりです。
| 会員番号 | フルネーム | 性別 | 生年月日 | 実在住所 | 郵便住所 | 連絡先番号 | メール |
|---|---|---|---|---|---|---|---|
| 1 | ジャネット・ジョーンズ | 女性 | 21-07-1980 | 第一街区画 No 4 | 専用バッグ | 0759 253 542 | janetjones@yagoo.cm |
| 2 | ジャネット・スミス・ジョーンズ | 女性 | 23-06-1980 | メルローズ 123 | NULL | NULL | jj@fstreet.com |
| 3 | ロバート・フィル | 男性 | 12-07-1989 | サード ストリート 3 | NULL | 12345 | rm@tstreet.com |
| 4 | グロリア・ウィリアムズ | 女性 | 14-02-1984 | セカンドストリート2 | NULL | NULL | NULL |
| 5 | レナード・ホフスタッター | 男性 | NULL | ウッドクレスト | NULL | 845738767 | NULL |
| 6 | シェルドン・クーパー | 男性 | NULL | ウッドクレスト | NULL | 976736763 | NULL |
| 7 | ラジェッシュ・クースラパリ | 男性 | NULL | ウッドクレスト | NULL | 938867763 | NULL |
| 8 | レスリー・ウィンクル | 男性 | 14-02-1984 | ウッドクレスト | NULL | 987636553 | NULL |
| 9 | ハワード・ウォロウィッツ | 男性 | 24-08-1981 | サウスパーク | PO Box 4563 | 987786553 | NULL |
DESC による降順ソート
マーケティング部門が、会員情報を生年月日の降順で並べたいとします。こうすることで、チームは誕生日のお祝いメッセージをタイムリーに送信できます。以下のクエリでリストを作成できます。
SELECT * FROM members ORDER BY date_of_birth DESC;
上記のスクリプトを実行すると、 MySQL myflixdbに対するWorkbenchの実行結果は、以下に示すとおりです。
ASC による昇順ソート
昇順の同じクエリでは、キーワードが入れ替わるだけです。
SELECT * FROM members ORDER BY date_of_birth ASC;
注意: NULLは値が全くないことを意味し、ゼロや空文字列とは異なります。両方のスクリーンショットで、NULLの日付がどのようにグループ化されているかを確認してください。 MySQL NULLは他のどの値よりも小さい値として扱われるため、NULLの行は昇順では最初に表示され、降順では最後に表示されます。
複数の列で並べ替える方法 MySQL
単一の列で並べ替えることで、簡単な質問には答えられます。しかし、レポートでは通常、2段階目の並べ替えが必要になります。ORDER BY句は、まさにその目的のために、カンマ区切りのフィールドリストを受け付けます。
明示的な指示なしにすべてのメンバーレコードを一覧表示する以下のSQLソートスクリプトを考えてみましょう。
SELECT * FROM `members`;
上記のスクリプトを実行すると、以下に示すような結果が得られます。
| 会員番号 | フルネーム | 性別 | 生年月日 | 実在住所 | 郵便住所 | 連絡先番号 | メール |
|---|---|---|---|---|---|---|---|
| 1 | ジャネット・ジョーンズ | 女性 | 21-07-1980 | 第一街区画 No 4 | 専用バッグ | 0759 253 542 | janetjones@yagoo.cm |
| 2 | ジャネット・スミス・ジョーンズ | 女性 | 23-06-1980 | メルローズ 123 | NULL | NULL | jj@fstreet.com |
| 3 | ロバート・フィル | 男性 | 12-07-1989 | サード ストリート 3 | NULL | 12345 | rm@tstreet.com |
| 4 | グロリア・ウィリアムズ | 女性 | 14-02-1984 | セカンドストリート2 | NULL | NULL | NULL |
| 5 | レナード・ホフスタッター | 男性 | NULL | ウッドクレスト | NULL | 845738767 | NULL |
| 6 | シェルドン・クーパー | 男性 | NULL | ウッドクレスト | NULL | 976736763 | NULL |
| 7 | ラジェッシュ・クースラパリ | 男性 | NULL | ウッドクレスト | NULL | 938867763 | NULL |
| 8 | レスリー・ウィンクル | 男性 | 14-02-1984 | ウッドクレスト | NULL | 987636553 | NULL |
| 9 | ハワード・ウォロウィッツ | 男性 | 24-08-1981 | サウスパーク | PO Box 4563 | 987786553 | NULL |
単一列をデフォルトの順序で並べ替える
クエリ結果セットを性別フィールドでソートしたリストを作成したいとします。以下のスクリプトは、方向を指定せずにそれを実現します。
SELECT * FROM `members` ORDER BY `gender`;
| 会員番号 | フルネーム | 性別 | 生年月日 | 実在住所 | 郵便住所 | 連絡先番号 | メール |
|---|---|---|---|---|---|---|---|
| 1 | ジャネット・ジョーンズ | 女性 | 21-07-1980 | 第一街区画 No 4 | 専用バッグ | 0759 253 542 | janetjones@yagoo.cm |
| 2 | ジャネット・スミス・ジョーンズ | 女性 | 23-06-1980 | メルローズ 123 | NULL | NULL | jj@fstreet.com |
| 4 | グロリア・ウィリアムズ | 女性 | 14-02-1984 | セカンドストリート2 | NULL | NULL | NULL |
| 3 | ロバート・フィル | 男性 | 12-07-1989 | サード ストリート 3 | NULL | 12345 | rm@tstreet.com |
| 5 | レナード・ホフスタッター | 男性 | NULL | ウッドクレスト | NULL | 845738767 | NULL |
| 6 | シェルドン・クーパー | 男性 | NULL | ウッドクレスト | NULL | 976736763 | NULL |
| 7 | ラジェッシュ・クースラパリ | 男性 | NULL | ウッドクレスト | NULL | 938867763 | NULL |
| 8 | レスリー・ウィンクル | 男性 | 14-02-1984 | ウッドクレスト | NULL | 987636553 | NULL |
| 9 | ハワード・ウォロウィッツ | 男性 | 24-08-1981 | サウスパーク | PO Box 4563 | 987786553 | NULL |
「女性」メンバーが最初に表示され、次に「男性」メンバーが表示されます。これは、ORDER BY 句で ASC または を指定せずに使用した場合です。 MySQL DESCキーワード、 MySQL デフォルトでは、クエリ結果セットを昇順にソートします。
2つの列を反対方向に並べ替える
それでは、 XNUMX つの列を使用して並べ替える最初の列は ソート in 昇順 デフォルトでは、2 列目は ソート in 降順.
SELECT * FROM `members` ORDER BY `gender`, `date_of_birth` DESC;
上記のスクリプトを実行すると、 MySQL myflixdbに対するWorkbenchの実行結果は以下のとおりです。
性別列はデフォルトで昇順にソートされ、生年月日列は明示的に降順にソートされます。各方向キーワードは、そのキーワードが続く列にのみ適用されます。
ORDER BY と WHERE、LIMIT、GROUP BY を組み合わせる方法
ORDER BY句は、実際のクエリにおいて唯一の句となることは稀です。 MySQL 常に一定の順序で節を評価するため、その順序を知ることで、結果がそのようになる理由が説明できます。
- FROM テーブルから行を読み取ります。
- NeoCity 条件を満たさない行を破棄します。
- グループ化 残った行をグループにまとめ、HAVING句でそれらのグループをフィルタリングします。
- ORDER BY 残りの行を順に並べます。
- LIMIT ソート済みリストから、指定された行数だけ切り取ります。
ORDER BY は WHERE と GROUP BY の後に実行され、LIMIT の前に実行されるため、「ウッドクレストの最年少メンバー 5 人」のようなクエリは 1 つのステートメントで表現されます。
SELECT full_names, date_of_birth FROM members WHERE physical_address = 'Woodcrest' ORDER BY date_of_birth DESC LIMIT 5;
グループ化された結果にも同じ順序が適用されます。 集計関数 例えばCOUNTはソートできるため、最も利用頻度の高いカテゴリがレポートの上位に表示されます。
SELECT gender, COUNT(*) AS members_count FROM members GROUP BY gender ORDER BY members_count DESC;
ヒント: ORDER BY句では、列のエイリアス、式、または列の位置(例:ORDER BY 3)で並べ替えることができます。位置による並べ替えは、SELECTリストに新しい列を挿入するとソートキーが暗黙的に変更されるため、不安定です。代わりに列に名前を付けてください。
パフォーマンス上の重要なポイントが 1 つあります。ソートされた列にインデックスがある場合、 MySQL インデックス順に行を読み込むことで、ソート処理を完全に省略できます。インデックスがない場合、大きなテーブルではメモリ内またはディスク上でのファイルソートが強制的に行われ、これがレポートクエリの処理速度が低下する一般的な原因となります。

ASC は昇順の短縮形です
MySQL DESC は降順の短縮形です

