ホームページ  >  記事  >  データベース  >  mysqlでクエリの数を制限する方法

mysqlでクエリの数を制限する方法

青灯夜游
青灯夜游オリジナル
2021-12-27 18:00:525528ブラウズ

mysql では、"LIMIT" 句を使用してクエリの数を制限できます。この句は、SELECT クエリの結果によって返される項目の数を制限できます。構文 "SELECT column1, column2,... FROM テーブル LIMIT オフセット、カウント;」。

mysqlでクエリの数を制限する方法

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

データ テーブルに数万のデータがある場合、テーブル内のすべてのデータを一度にクエリすると、データが返される速度が低下し、データベース サーバーに多大な負荷がかかります。このとき、LIMIT 句を使用して、クエリ結果によって返される項目の数を制限できます。

LIMIT は MySQL の特別なキーワードで、クエリ結果の表示を開始するレコードと合計で表示されるレコードの数を指定するために使用されます。

1. MySQL LIMIT 句の概要

SELECT ステートメントで LIMIT 句を使用して、結果を制限します。結果セット行。 LIMIT句は 1 つまたは 2 つのパラメータを受け入れます。両方のパラメータの値は、ゼロまたは正の整数である必要があります。

2 つのパラメーターの LIMIT 句の構文を以下で説明します。

SELECT 
    column1,column2,...
FROM
    table
LIMIT offset , count;

LIMIT 句のパラメーターを見てみましょう。

  • offsetパラメータは、返される最初の行のオフセットを指定します。最初の行のオフセットは 1 ではなく 0 です。
  • count返す行の最大数を指定します。

mysqlでクエリの数を制限する方法

LIMIT 句を 1 つのパラメータとともに使用する場合、このパラメータは結果セットの先頭から返される内容を決定するために使用されます。最大行数。

SELECT 
    column1,column2,...
FROM
    table
LIMIT count;

上記のクエリは、2 つのパラメータを受け入れる LIMIT 句を含む次のクエリと同等です:

SELECT 
    column1,column2,...
FROM
    table
LIMIT 0 , count;

2. MySQL LIMIT を使用して最初の N 行を取得します

LIMIT 句を使用すると、次のようにテーブル内の最初の N 行レコードを選択できます。

SELECT 
    column1,column2,...
FROM
    table
LIMIT N;

たとえば、クエリ employeesテーブル内の最初の 5 顧客については、次のクエリを使用してください:

SELECT customernumber, customername, creditlimit FROM customers LIMIT 5;

または -

SELECT customernumber, customername, creditlimit FROM customers LIMIT 0,5;

上記のステートメントを実行して、以下の結果-

mysql> SELECT customernumber, customername, creditlimit FROM customers LIMIT 5;
+----------------+----------------------------+-------------+
| customernumber | customername               | creditlimit |
+----------------+----------------------------+-------------+
|            103 | Atelier graphique          | 21000       |
|            112 | Signal Gift Stores         | 71800       |
|            114 | Australian Collectors, Co. | 117300      |
|            119 | La Rochelle Gifts          | 118200      |
|            121 | Baane Mini Imports         | 81700       |
+----------------+----------------------------+-------------+
5 rows in set

3. MySQL LIMIT を使用して最高値と最低値を取得する

LIMIT 句は、ORDER BY 句と一緒によく使用されます。まず、ORDER BY 句を使用して特定の基準に基づいて結果セットを並べ替え、次に LIMIT 句を使用して最小値または最大値を見つけます。

注: ORDER BY 句は、指定したフィールドで並べ替えるために使用されます。

サンプル データベース (yiibaidb) の次の customers テーブルを参照してください。そのテーブル構造は次のとおりです -

mysql> desc customers;
+------------------------+---------------+------+-----+---------+-------+
| Field                  | Type          | Null | Key | Default | Extra |
+------------------------+---------------+------+-----+---------+-------+
| customerNumber         | int(11)       | NO   | PRI | NULL    |       |
| customerName           | varchar(50)   | NO   |     | NULL    |       |
| contactLastName        | varchar(50)   | NO   |     | NULL    |       |
| contactFirstName       | varchar(50)   | NO   |     | NULL    |       |
| phone                  | varchar(50)   | NO   |     | NULL    |       |
| addressLine1           | varchar(50)   | NO   |     | NULL    |       |
| addressLine2           | varchar(50)   | YES  |     | NULL    |       |
| city                   | varchar(50)   | NO   |     | NULL    |       |
| state                  | varchar(50)   | YES  |     | NULL    |       |
| postalCode             | varchar(15)   | YES  |     | NULL    |       |
| country                | varchar(50)   | NO   |     | NULL    |       |
| salesRepEmployeeNumber | int(11)       | YES  | MUL | NULL    |       |
| creditLimit            | decimal(10,2) | YES  |     | NULL    |       |
+------------------------+---------------+------+-----+---------+-------+
13 rows in set

たとえば、クレジット限度額が最も高い 1 件 上位 5 人の顧客については、次のクエリを使用してください。

SELECT customernumber, customername, creditlimit
FROM customers
ORDER BY creditlimit DESC
LIMIT 5;

上記のクエリ ステートメントを実行し、次の結果を取得します。 -

mysql> SELECT customernumber, customername, creditlimit
FROM customers
ORDER BY creditlimit DESC
LIMIT 5;
+----------------+------------------------------+-------------+
| customernumber | customername                 | creditlimit |
+----------------+------------------------------+-------------+
|            141 | Euro+ Shopping Channel       | 227600      |
|            124 | Mini Gifts Distributors Ltd. | 210500      |
|            298 | Vida Sport, Ltd              | 141300      |
|            151 | Muscle Machine Inc           | 138500      |
|            187 | AV Stores, Co.               | 136800      |
+----------------+------------------------------+-------------+
5 rows in set

次のクエリは、5 つの顧客を返します。最も低いクレジット限度額を持つ顧客:

SELECT customernumber, customername, creditlimit
FROM customers
ORDER BY
 creditlimit ASC
LIMIT 5;

4. MySQL LIMIT を使用して n 番目に高い値を取得します

MySQL で最も難しい問題の 1 つは、次のとおりです。結果セット内の n 番目に高い値 2 番目 (または n) に最も高価な製品をクエリするなどの値は、明らかに MAX や MIN などの関数を使用して取得することはできません。ただし、MySQL LIMIT を使用すると、このような問題を解決できます。

  • 最初に 、結果セットを降順に並べ替えます。
  • 2 番目のステップ では、LIMIT 句を使用して、n 番目に高価な製品を取得します。

一般的なクエリは次のとおりです。

SELECT 
    column1, column2,...
FROM
    table
ORDER BY column1 DESC
LIMIT nth-1, count;

以下の例を見てみましょう。これは、次の製品 (products) テーブルを使用して実行されます。サンプル データベース (yiibaidb) のデモ。 productsテーブルの構造は次のとおりです -

mysql> desc products;
+--------------------+---------------+------+-----+---------+-------+
| Field              | Type          | Null | Key | Default | Extra |
+--------------------+---------------+------+-----+---------+-------+
| productCode        | varchar(15)   | NO   | PRI | NULL    |       |
| productName        | varchar(70)   | NO   |     | NULL    |       |
| productLine        | varchar(50)   | NO   | MUL | NULL    |       |
| productScale       | varchar(10)   | NO   |     | NULL    |       |
| productVendor      | varchar(50)   | NO   |     | NULL    |       |
| productDescription | text          | NO   |     | NULL    |       |
| quantityInStock    | smallint(6)   | NO   |     | NULL    |       |
| buyPrice           | decimal(10,2) | NO   |     | NULL    |       |
| MSRP               | decimal(10,2) | NO   |     | NULL    |       |
+--------------------+---------------+------+-----+---------+-------+
9 rows in set

次の製品テーブルの行レコードを表示します:

mysql> SELECT productCode, productName, buyprice
FROM products
ORDER BY
 buyprice DESC;
+-------------+--------------------------------------+----------+
| productCode | productName                          | buyprice |
+-------------+--------------------------------------+----------+
| S10_4962    | 1962 LanciaA Delta 16V               | 103.42   |
| S18_2238    | 1998 Chrysler Plymouth Prowler       | 101.51   |
| S10_1949    | 1952 Alpine Renault 1300             | 98.58    |
| S24_3856    | 1956 Porsche 356A Coupe              | 98.3     |
| S12_1108    | 2001 Ferrari Enzo                    | 95.59    |
| S12_1099    | 1968 Ford Mustang                    | 95.34    |
... ....
+-------------+--------------------------------------+----------+
110 rows in set

私たちのタスクは、2 番目に価格の高い製品を見つけることです。結果セット内。次のクエリのように、LIMIT 句を使用して 2 行目を選択できます (注: オフセットは 0 から始まるため、1 から始まるように指定します)レコードの行を取得します):

SELECT productCode, productName, buyprice FROM  products
ORDER BY buyprice DESC
LIMIT 1, 1;

上記のクエリ ステートメントを実行すると、次の結果が得られます-

mysql> SELECT productCode, productName, buyprice FROM  products
ORDER BY buyprice DESC
LIMIT 1, 1;
+-------------+--------------------------------+----------+
| productCode | productName                    | buyprice |
+-------------+--------------------------------+----------+
| S18_2238    | 1998 Chrysler Plymouth Prowler | 101.51   |
+-------------+--------------------------------+----------+
1 row in set

同様に、販売価格が 3 番目と 4 番目に高い製品情報を取得します。 リミット 2、1 および リミット 3、1

[関連する推奨事項: mysql ビデオ チュートリアル ]

以上がmysqlでクエリの数を制限する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。