mysql怎么限制查詢個數

mysql中,可以利用“LIMIT”子句來限制查詢個數,該子句可以限制select查詢結果返回的條數,語法“SELECT column1,column2,… FROM table LIMIT offset , count;”。

mysql怎么限制查詢個數

本教程操作環境:windows7系統、mysql8版本、Dell G3電腦。

當數據表中有上萬條數據時,一次性查詢出表中的全部數據會降低數據返回的速度,同時給數據庫服務器造成很大的壓力。這時就可以用?LIMIT 子句來限制查詢結果返回的條數。

LIMIT 是 MySQL 中的一個特殊關鍵字,用于指定查詢結果從哪條記錄開始顯示,一共顯示多少條記錄。

1. MySQL LIMIT子句簡介

在SELECT語句中使用LIMIT子句來約束結果集中的行數。LIMIT子句接受一個或兩個參數。兩個參數的值必須為零或正整數。

下面說明了兩個參數的LIMIT子句語法:

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

我們來查看LIMIT子句參數:

  • offset參數指定要返回的第一行的偏移量。第一行的偏移量為0,而不是1。
  • count指定要返回的最大行數。

mysql怎么限制查詢個數

當您使用帶有一個參數的LIMIT子句時,此參數將用于確定從結果集的開頭返回的最大行數。

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

上面的查詢等同于下面接受兩個參數的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

例如,要查詢信用額度最高的前五名客戶,請使用以下查詢:

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;

4. 使用MySQL LIMIT獲得第n個最高值

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。

【相關推薦:mysql視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享