집 >데이터 베이스 >MySQL 튜토리얼 >mysql에서 쿼리 수를 제한하는 방법
mysql에서는 "LIMIT" 절을 사용하여 쿼리 수를 제한할 수 있습니다. 이 절은 SELECT 쿼리 결과에 의해 반환되는 항목 수를 제한할 수 있습니다. 구문은 "SELECT column1, column2,... FROM table LIMIT입니다. 오프셋, 개수;" .
이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.
데이터 테이블에 수만 개의 데이터가 있는 경우 테이블의 모든 데이터를 한 번에 쿼리하면 데이터 반환 속도가 느려지고 데이터베이스 서버에 많은 부담을 줄 수 있습니다. 이때 LIMIT 절을 사용하여 반환되는 쿼리 결과의 개수를 제한할 수 있습니다.
LIMIT는 쿼리 결과가 표시되기 시작하는 레코드와 총 표시되는 레코드 수를 지정하는 데 사용되는 MySQL의 특수 키워드입니다.
SELECT
문의 LIMIT
절을 사용하여 결과 집합의 행 수를 제한하세요. LIMIT
절은 하나 또는 두 개의 매개변수를 허용합니다. 두 매개변수의 값은 모두 0 또는 양의 정수여야 합니다. SELECT
语句中使用LIMIT
子句来约束结果集中的行数。LIMIT
子句接受一个或两个参数。两个参数的值必须为零或正整数。
下面说明了两个参数的LIMIT
子句语法:
SELECT column1,column2,... FROM table LIMIT offset , count;
我们来查看LIMIT
子句参数:
offset
参数指定要返回的第一行的偏移量。第一行的偏移量为0
,而不是1
。count
指定要返回的最大行数。当您使用带有一个参数的LIMIT
子句时,此参数将用于确定从结果集的开头返回的最大行数。
SELECT column1,column2,... FROM table LIMIT count;
上面的查询等同于下面接受两个参数的LIMIT
子句的查询:
SELECT column1,column2,... FROM table LIMIT 0 , count;
可以使用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
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
例如,要查询信用额度最高的前五名客户,请使用以下查询:
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
以下查询将返回信用限额最低的五位客户:
SELECT customernumber, customername, creditlimit FROM customers ORDER BY creditlimit ASC LIMIT 5;
MySQL中最棘手的问题之一是:如何获得结果集中的第n
个最高值,例如查询第二(或第n
)贵的产品是哪个,显然不能使用MAX或MIN这样的函数来查询获得。 但是,我们可以使用MySQL LIMIT
来解决这样的问题。
LIMIT
子句获得第n
贵的产品。通用查询如下:
SELECT column1, column2,... FROM table ORDER BY column1 DESC LIMIT nth-1, count;
下面我们来看看一个例子,将使用示例数据库(yiibaidb)中的产品(products
)表来进行演示。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
我们的任务找出结果集中价格第二高的产品。可以使用LIMIT
子句来选择第二行,如以下查询(注意:偏移量从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
类似的,获取售价第三高、第四高的产品信息为:LIMIT 2, 1
和 LIMIT 3, 1
LIMIT
절 구문은 아래에 설명되어 있습니다. rrreee LIMIT
절 매개변수를 살펴보겠습니다.
offset
매개변수는 반환될 첫 번째 행의 오프셋을 지정합니다. 첫 번째 줄의 오프셋은 1
이 아니라 0
입니다. count
반환할 최대 행 수를 지정합니다. LIMIT
절을 사용하는 경우 이 매개변수는 결과 집합의 시작 부분에서 반환할 최대 행 수를 결정하는 데 사용됩니다. 🎜rrreee🎜위 쿼리는 두 개의 매개변수가 있는 LIMIT
절을 허용하는 다음 쿼리와 동일합니다. 🎜rrreeeLIMIT
절을 사용하여 테이블에서 레코드의 첫 번째 N
행을 선택할 수 있습니다. 🎜rrreee🎜예를 들어 , 를 쿼리하려면 직원
테이블의 첫 번째 5
고객에 대해 다음 쿼리를 사용하십시오. 🎜rrreee🎜 또는 -🎜rrreee🎜 위 명령문을 실행하면 다음 결과가 나타납니다. -🎜rrreeeLIMIT
절은 종종 다음과 함께 사용됩니다. ORDER BY 절. 먼저 ORDER BY
절을 사용하여 특정 기준에 따라 결과 집합을 정렬한 다음 LIMIT
절을 사용하여 최소값 또는 최대값을 찾습니다. 🎜🎜🎜참고: 지정된 필드별로 정렬하려면 ORDER BY
절을 사용하세요. 🎜🎜🎜샘플 데이터베이스(yiibaidb)에서 다음 customers
테이블을 참조하세요. 테이블 구조는 다음과 같습니다. - 🎜rrreee🎜예를 들어 신용 한도가 가장 높은 상위 5명의 고객을 쿼리하려면 다음을 사용하세요. 다음 쿼리 :🎜rrreee🎜위 쿼리 문을 실행하여 다음 결과를 얻습니다. -🎜rrreee🎜다음 쿼리는 신용 한도가 가장 낮은 5명의 고객을 반환합니다.🎜rrreeen
번째로 높은 값을 얻는 방법입니다. 두 번째(또는 n
) 쿼리 중 가장 비싼 제품은 무엇입니까? 물론 MAX 또는 MIN과 같은 함수를 사용하여 쿼리할 수는 없습니다. 그러나 MySQL LIMIT
를 사용하여 이러한 문제를 해결할 수 있습니다. 🎜LIMIT
절을 사용하여 n
번째로 가장 비싼 제품을 얻는 것입니다. products
) 테이블을 사용하여 아래 예를 살펴보겠습니다. 데모. products
테이블의 구조는 다음과 같습니다. - 🎜rrreee🎜다음 제품 테이블의 행을 살펴보세요. 🎜rrreee🎜 우리의 임무는 결과 집합에서 두 번째로 높은 가격의 제품을 찾는 것입니다. 다음 쿼리와 같이 LIMIT
절을 사용하여 두 번째 행을 선택할 수 있습니다(참고: 오프셋은 0
에서 시작하므로 1
에서 지정). > 시작하고 한 줄의 레코드를 가져옵니다): 🎜rrreee🎜위 쿼리문을 실행하면 다음과 같은 결과가 나옵니다. -🎜rrreee🎜마찬가지로 세 번째와 네 번째로 높은 판매 가격의 제품 정보를 가져옵니다: LIMIT 2, 1 code> 및 <code>LIMIT 3, 1
. 🎜🎜【관련 추천: 🎜mysql 비디오 튜토리얼🎜】🎜
위 내용은 mysql에서 쿼리 수를 제한하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!