MySQLクエリのソートとページング関連

MySQLクエリのソートとページング関連

概要

通常、データベース内のデータを直接表示することは望ましくないため、最後の 2 つのセクションでは、データをフィルター処理する方法を示しました。データのフィルタリングに加えて、

データを並べ替える必要がある場合もあります。たとえば、リスト内で最もコストの高い項目を知りたい場合は、金額フィールドを降順で並べ替える必要があります。若い年齢から年配の年齢までの分布を確認したい場合は、ユーザー テーブルの年齢フィールドを昇順で並べ替える必要があります。

また、データを制限する必要もあるかもしれません。例えば、1〜10、11〜20、21〜30の支払いをしたユーザーにそれぞれ異なるギフトを贈る必要があります。このとき、データ制限は非常に役立ちます。

注: 次のスクリプトでは、[] はオプションを示し、| 区切り文字はいずれか 1 つを選択できることを示します。

データの並び替え順

構文の形式は次のとおりです。

1. ソートするフィールドは order by ステートメントに従います。

2. asc と desc は並べ替えのルールを示します。asc: 昇順、desc: 降順、デフォルトは昇順 asc です。

3. 並べ替えには複数のフィールドを指定でき、複数のフィールドをカンマで区切ります。

4. 複数フィールドのソートでは、フィールドが早いほど優先順位が高くなります。以下では、cname1 が最初にソートされます。cname1 が同じ値の場合、すべてのフィールドがソートされるまで cname2 のソートが開始されます。

cname1 [asc|desc]、cname2 [asc|desc]... で tname から cname を選択します。

単一フィールドで並べ替え

たとえば、売上金額は取引注文金額に応じて降順で表示されます。

mysql> t_order から * を選択します。
+---------+---------+---------+-------+
| 注文ID | アカウント | 金額 | 商品 |
+---------+---------+---------+-------+
| 8 | ブランド | 52.2 | 2 |
| 9 | 雌鳥 | 1752.02 | 7 |
| 10 | ヘリン | 88.5 | 4 |
| 11 | ソル | 1007.9 | 11 |
| 12 | 一日 | 12 | 1 |
| 13 | ウェン | 52.2 | 5 |
| 14 | サリー | 99.71 | 9 |
+---------+---------+---------+-------+
7行セット

mysql> t_order から * を選択し、金額の降順で並べ替えます。
+---------+---------+---------+-------+
| 注文ID | アカウント | 金額 | 商品 |
+---------+---------+---------+-------+
| 9 | 雌鳥 | 1752.02 | 7 |
| 11 | ソル | 1007.9 | 11 |
| 14 | サリー | 99.71 | 9 |
| 10 | ヘリン | 88.5 | 4 |
| 8 | ブランド | 52.2 | 2 |
| 13 | ウェン | 52.2 | 5 |
| 12 | 一日 | 12 | 1 |
+---------+---------+---------+-------+
7行セット

複数のフィールドを並べ替える

複数のフィールドはカンマでソートされ、左から右に向かって優先順位が低くなります。次の図に示すように、金額が同じ場合は、購入されたアイテムの数に応じて、多いものから少ないものの順にソートされます。

mysql> select * from t_order order by amount desc,goods desc;
+---------+---------+---------+-------+
| 注文ID | アカウント | 金額 | 商品 |
+---------+---------+---------+-------+
| 9 | 雌鳥 | 1752.02 | 7 |
| 11 | ソル | 1007.9 | 11 |
| 14 | サリー | 99.71 | 9 |
| 10 | ヘリン | 88.5 | 4 |
| 13 | ウェン | 52.2 | 5 |
| 8 | ブランド | 52.2 | 2 |
| 12 | 一日 | 12 | 1 |
+---------+---------+---------+-------+
7行セット

別名で並べ替え

エイリアスまたは条件付きクエリによる並べ替えの目的は、コードを簡素化し、使いやすくすることです。エイリアスは英語または中国語にすることができます。

mysql> t_order から account を ac、amount を am、goods を gd として選択します。order by am、gd desc;

+-------+---------+----+
| ac | am | gd |
+-------+---------+----+
| 夜 | 12 | 1 |
| ウェン | 52.2 | 5 |
| ブランド | 52.2 | 2 |
| ヘリン | 88.5 | 4 |
| サリー | 99.71 | 9 |
| ソル | 1007.9 | 11 |
| 雌鳥 | 1752.02 | 7 |
+-------+---------+----+
7行セット

フィールドの並べ替えで関数を使用する

以下では abs 関数が使用されているため、am フィールドの降順ソートでは、-99.99 が 99.71 より上にランク付けされます。

mysql> t_order から * を選択します。
+---------+---------+---------+-------+
| 注文ID | アカウント | 金額 | 商品 |
+---------+---------+---------+-------+
| 8 | ブランド | 52.2 | 2 |
| 9 | 雌鳥 | 1752.02 | 7 |
| 10 | ヘリン | 88.5 | 4 |
| 11 | ソル | 1007.9 | 11 |
| 12 | 一日 | 12 | 1 |
| 13 | ウェン | 52.2 | 5 |
| 14 | サリー | 99.71 | 9 |
| 15 | ブランド1 | -99.99 | 5 |
+---------+---------+---------+-------+
8行セット

mysql> t_order から account を ac、amount を am、goods を gd として選択します。order by abs(am) desc;

+--------+---------+----+
| ac | am | gd |
+--------+---------+----+
| 雌鳥 | 1752.02 | 7 |
| ソル | 1007.9 | 11 |
| ブランド1 | -99.99 | 5 |
| サリー | 99.71 | 9 |
| ヘリン | 88.5 | 4 |
| ブランド | 52.2 | 2 |
| ウェン | 52.2 | 5 |
| 夜 | 12 | 1 |
+--------+---------+----+
8行セット

Where条件と組み合わせて使用​​する

order は where 条件の後にあり、where でフィルタリングされたデータに基づいてデータを並べ替えます。以下は、購入金額 > 80 かつ購入数量 > 5 でフィルタリングされ、価格の降順で並べ替えられたデータです。

mysql> t_order から * を選択します。
+---------+---------+---------+-------+
| 注文ID | アカウント | 金額 | 商品 |
+---------+---------+---------+-------+
| 8 | ブランド | 52.2 | 2 |
| 9 | 雌鳥 | 1752.02 | 7 |
| 10 | ヘリン | 88.5 | 4 |
| 11 | ソル | 1007.9 | 11 |
| 12 | 一日 | 12 | 1 |
| 13 | ウェン | 52.2 | 5 |
| 14 | サリー | 99.71 | 9 |
| 15 | ブランド1 | -99.99 | 5 |
+---------+---------+---------+-------+
8行セット

mysql> select * from t_order where amount>80 and goods>5 order by amount desc;
+---------+---------+---------+-------+
| 注文ID | アカウント | 金額 | 商品 |
+---------+---------+---------+-------+
| 9 | 雌鳥 | 1752.02 | 7 |
| 11 | ソル | 1007.9 | 11 |
| 14 | サリー | 99.71 | 9 |
+---------+---------+---------+-------+

データ制限

多くの場合、要件を満たすデータをフィルタリングした後でも、これらのデータの特定の範囲を取得する必要があります。たとえば、支払いが 1,000 を超える 1 番目から 10 番目、11 番目から 20 番目、21 番目から 30 番目のユーザーには、異なるギフトを贈りたいとします。この場合、制限操作を使用する必要があります。

Limit は、選択クエリによって返されるデータを制限するために使用され、データのランク付けやページングでよく使用されます。

構文の形式は次のとおりです。

tname limit [offset,] count から cname を選択します。

1. offset はオフセットを示し、スキップする行数を示します。省略可能で、デフォルト値は 0 で、これは 0 行をスキップすることを意味します。たとえば、limit 8 は limit 0,8 と同じです。

2. count: オフセット offset をスキップした後に取得するデータ行の数。これは count 行です。

3. limit内のoffsetとcountの値は式で表現できません。

最初のnレコードを取得する

次の図に示すように、制限 n と制限 0,n は一致しています。

mysql> t_order から * を選択します。
+---------+---------+---------+-------+
| 注文ID | アカウント | 金額 | 商品 |
+---------+---------+---------+-------+
| 8 | ブランド | 52.2 | 2 |
| 9 | 雌鳥 | 1752.02 | 7 |
| 10 | ヘリン | 88.5 | 4 |
| 11 | ソル | 1007.9 | 11 |
| 12 | 一日 | 12 | 1 |
| 13 | ウェン | 52.2 | 5 |
| 14 | サリー | 99.71 | 9 |
| 15 | ブランド1 | -99.99 | 5 |
+---------+---------+---------+-------+
8行セット

mysql> t_order 制限 2 から * を選択
;
+---------+---------+---------+-------+
| 注文ID | アカウント | 金額 | 商品 |
+---------+---------+---------+-------+
| 8 | ブランド | 52.2 | 2 |
| 9 | 雌鳥 | 1752.02 | 7 |
+---------+---------+---------+-------+
2行セット

mysql> t_order 制限 0,2 から * を選択します。
+---------+---------+---------+-------+
| 注文ID | アカウント | 金額 | 商品 |
+---------+---------+---------+-------+
| 8 | ブランド | 52.2 | 2 |
| 9 | 雌鳥 | 1752.02 | 7 |
+---------+---------+---------+-------+
2行セット

1つのレコードを制限する

ここで、最大支払額と最小支払額の記録を取得します。まず順序条件を使用して並べ替え、次に最初のレコードを制限できます。

 mysql> t_order から * を選択します。
 +---------+---------+---------+-------+
 | 注文ID | アカウント | 金額 | 商品 |
 +---------+---------+---------+-------+
 | 8 | ブランド | 52.2 | 2 |
 | 9 | 雌鳥 | 1752.02 | 7 |
 | 10 | ヘリン | 88.5 | 4 |
 | 11 | ソル | 1007.9 | 11 |
 | 12 | 一日 | 12 | 1 |
 | 13 | ウェン | 52.2 | 5 |
 | 14 | サリー | 99.71 | 9 |
 | 15 | ブランド1 | -99.99 | 5 |
 +---------+---------+---------+-------+
 8行セット

 mysql> select * from t_order where amount>0 order by amount desc limit 1;
 +---------+---------+---------+-------+
 | 注文ID | アカウント | 金額 | 商品 |
 +---------+---------+---------+-------+
 | 9 | 雌鳥 | 1752.02 | 7 |
 +---------+---------+---------+-------+
 セット内の1行

 mysql> select * from t_order where amount>0 order by amount asc limit 1;
 +---------+---------+--------+-------+
 | 注文ID | アカウント | 金額 | 商品 |
 +---------+---------+--------+-------+
 | 12 | 一日 | 12 | 1 |
 +---------+---------+--------+-------+
 セット内の1行

上記は、MySQL クエリのソートとページングに関する詳細です。MySQL クエリの詳細については、123WORDPRESS.COM の他の関連記事をご覧ください。

以下もご興味があるかもしれません:
  • 数百万のデータに対するMySQLラージページクエリ最適化の実装
  • MySQLでページングクエリを実装する方法
  • 複数の無関係なテーブルからデータをクエリし、MySQL でページングする方法
  • MySQL ページングクエリ最適化テクニック
  • MySQL 最適化チュートリアル: 大規模なページングクエリ
  • MySQLを使用してページングクエリを実装する方法

<<:  Dockerコンテナのネットワークポート設定プロセスの詳細な説明

>>:  Vue の el-table は自動天井効果を実現します (固定をサポート)

推薦する

Linux 環境に MySQL 8.0 をインストールするプロセスの紹介

目次序文1. Linux は yum ソースを変更します (MYSQL のインストールが遅い場合は試...

MySQL v5.7.18 解凍バージョンのインストール詳細チュートリアル

MySQLをダウンロード5.1.1.1 より前のバージョン私のコンピュータは64ビットなので、Win...

HTML テーブルの境界線を設定する際のヒント

HTML を初めて使用する多くの人にとって、テーブル <table> は最もよく使用され...

Mybatis+mysqlはストアドプロシージャを使用してシリアル番号実装コードを生成します。

同時操作によるデータの重複を避けるために、データベースを操作するときにストアドプロシージャを使用して...

Nginx Rewrite の使用シナリオとコード例の詳細な説明

Nginx Rewriteの使用シナリオ1. URL アドレスジャンプ。たとえば、ユーザーが pm....

CSS3は、変換変形とイベントを組み合わせて扇形のナビゲーションを完成させます。

この場合、transition という単語を間違って書いたため、午後中ずっとそれに取り組みました。本...

HTML ページ スタイルの !-- -- の機能は何ですか?

主に低バージョンのブラウザ向け<!-- --> は HTML コメント タグです。上位バ...

HTML における DTD の使用法の概要

DTD はマークアップの文法規則のセットです。これは XML 1.0 仕様の一部であり、HTML フ...

JavaScript配列の一般的なメソッドの概要

目次1. JavaScriptで配列を作成する方法2. 配列メソッドの概要3. 方法の詳細な説明1....

Linux CRM デプロイメント コードの詳細な説明

Linuxの基本設定 Linux環境でpython3をコンパイルしてインストールする 1. Linu...

Vue でルートをジャンプする方法をご存知ですか?

目次最初の方法: router-link (宣言型ルーティング) 2番目の方法: router.pu...

MySQL インデックスの設計と最適化の方法

目次インデックスとは何ですか?左端のプレフィックス一致の原則key_lenの計算方法インデックスの最...

React リストバーとショッピングカートコンポーネントの使用の詳細な説明

この記事では、Reactリストバーとショッピングカートコンポーネントの具体的なコードを参考までに紹介...

Vue要素のバックグラウンド認証プロセスの分析

序文:最近、プロジェクトで管理システムに遭遇しました。権限設定が非常に興味深いと思いました。自分の学...

複雑なSQLクエリを含むMySQLの一般的なSQL文の概要

1. 複雑なSQLクエリ1.1. 単一テーブルクエリ(1)指定の列を選択する[例] 全生徒の生徒ID...