で注文してください MySQL: ASC & DESC クエリの例

⚡ スマートサマリー

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

  • 🔠 デフォルトの動作: ORDER BY は、ASC も DESC も指定されていない場合は昇順でソートするため、ほとんどのステートメントでは ASC は省略可能です。
  • <XNUMXxEXNUMX><XNUMXxAC><XNUMXxEXNUMX><XNUMXxEXNUMX><XNUMXxXNUMX><XNUMXxXNUMX>️️️️ ASCキーワード: ASCは、数字を小さい順から大きい順、文字列をAからZの順、日付を古い順から新しい順に並べます。
  • (すなわち、 説明キーワード: DESCは、その順序を逆にしたもので、最近の支払い履歴や生年月日順のリストに適しています。
  • 🧮 複数列ソート: 列の順序は重要です。ORDER BY gender, date_of_birth DESC は、まず性別を昇順でソートし、次に各グループ内で生年月日を降順でソートします。
  • 🔎 条項の組み合わせ: WHERE句は行をフィルタリングし、GROUP BY句はそれらを集計し、ORDER BY句は結果を順序付け、LIMIT句は結果を絞り込みます。
  • ⚙️ パフォーマンス係数: ソートされた列のインデックスにより MySQL 大きなテーブルに対してファイルソート操作を行わないようにするため。

で注文してください MySQL

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 つです。以下の表は、最も頻繁に並べ替えを行うデータ型について、これらの並べ替え方向を比較したものです。

DESC および ASC キーワードASC は昇順の短縮形です DESC および 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の実行結果は、以下に示すとおりです。

MySQL ORDER BY DESC クエリ結果

ASC による昇順ソート

昇順の同じクエリでは、キーワードが入れ替わるだけです。

SELECT * FROM members ORDER BY date_of_birth ASC;

MySQL ORDER BY 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の実行結果は以下のとおりです。

MySQL 2つの列で並べ替える例

性別列はデフォルトで昇順にソートされ、生年月日列は明示的に降順にソートされます。各方向キーワードは、そのキーワードが続く列にのみ適用されます。

ORDER BY と WHERE、LIMIT、GROUP BY を組み合わせる方法

ORDER BY句は、実際のクエリにおいて唯一の句となることは稀です。 MySQL 常に一定の順序で節を評価するため、その順序を知ることで、結果がそのようになる理由が説明できます。

  1. FROM テーブルから行を読み取ります。
  2. NeoCity 条件を満たさない行を破棄します。
  3. グループ化 残った行をグループにまとめ、HAVING句でそれらのグループをフィルタリングします。
  4. ORDER BY 残りの行を順に並べます。
  5. 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 インデックス順に行を読み込むことで、ソート処理を完全に省略できます。インデックスがない場合、大きなテーブルではメモリ内またはディスク上でのファイルソートが強制的に行われ、これがレポートクエリの処理速度が低下する一般的な原因となります。

よくあるご質問

可能です。ソートされた列にインデックスがない場合、 MySQL 結果セット全体に対してファイルソートを実行します。ORDER BY列と方向に一致するインデックスを追加することで、サーバーは行を順番に読み込み、この手順をスキップできます。

通常はそうではありません。utf8mb4_0900_ai_ci などのデフォルトの照合順序は大文字小文字を区別しないため、「apple」と「Apple」は一緒にソートされます。バイナリまたは _cs 照合順序、あるいは ORDER BY BINARY column_name を使用すると、大文字が先に来る大文字小文字を区別した順序になります。

はい。ORDER BY RAND() は結果セットをシャッフルするので、ランダムに映画やメンバーを選択するのに便利です。ただし、ソート前に各行にスコアを付けるため、LIMIT と組み合わせて使用​​し、非常に大きなテーブルでは使用を避けてください。

はい。次のようなツールに組み込まれたAIヘルパー MySQL ワークベンチ 平易な言葉で書かれたリクエストを、ORDER BY句を含むSELECT文に変換します。AIはレポートに必要な並べ替え順序を判断できないため、生成された並べ替え列と方向を必ず確認してください。

部分的にはそうです。AIを活用したアドバイザーは、低速クエリのログを読み取り、ファイルソート操作を排除するインデックスを提案します。ただし、インデックスを追加するたびに同じテーブルへの挿入と更新が遅くなるため、提案内容には人間のレビューが必要です。