sql >> Database >  >> RDS >> MariaDB

MariaDB FOUND_ROWS() uitgelegd

In MariaDB kunt u de LIMIT . gebruiken om het aantal rijen dat door een query wordt geretourneerd, te verminderen. De FOUND_ROWS() functie kan in dergelijke zoekopdrachten worden gebruikt om het aantal rijen te retourneren dat zou zijn geretourneerd, als de LIMIT clausule niet opgenomen.

Dit kan handig zijn, omdat u deze informatie kunt krijgen zonder dat u de query opnieuw hoeft uit te voeren.

De FOUND_ROWS() functie kan ook worden gebruikt om het aantal rijen terug te geven dat daadwerkelijk is geretourneerd door de beperkte instructie, als dat is wat u nodig heeft.

Syntaxis

De syntaxis gaat als volgt:

FOUND_ROWS()

Er zijn geen argumenten vereist of geaccepteerd.

Om het aantal rijen te krijgen dat door een instructie wordt geretourneerd, neemt u SQL_CALC_FOUND_ROWS op in de instructie en voer vervolgens FOUND_ROWS() . uit in een afzonderlijke query (nadat u de eerste query hebt uitgevoerd).

Voorbeeld

Hier is een voorbeeld om te demonstreren hoe de functie werkt.

Stel dat we een tabel als volgt maken:

SELECT SQL_CALC_FOUND_ROWS * 
FROM Pets 
LIMIT 2;

Resultaat:

+-------+-----------+---------+---------+------------+
| PetId | PetTypeId | OwnerId | PetName | DOB        |
+-------+-----------+---------+---------+------------+
|     1 |         2 |       3 | Fluffy  | 2020-11-20 |
|     2 |         3 |       3 | Fetch   | 2019-08-16 |
+-------+-----------+---------+---------+------------+

Er zijn slechts twee rijen geretourneerd, zoals gespecificeerd door de LIMIT clausule.

Laten we nu echter FOUND_ROWS() . gebruiken om te zien hoeveel rijen zouden zijn geretourneerd als we de LIMIT niet hadden gebruikt clausule:

SELECT FOUND_ROWS();

Resultaat:

+--------------+
| FOUND_ROWS() |
+--------------+
|            8 |
+--------------+

Het vertelt ons dat acht rijen zouden zijn geretourneerd als we de LIMIT . niet hadden gebruikt clausule.

We kunnen dit verifiëren door de query uit te voeren zonder de LIMIT clausule:

SELECT * 
FROM Pets;

Resultaat:

+-------+-----------+---------+---------+------------+
| PetId | PetTypeId | OwnerId | PetName | DOB        |
+-------+-----------+---------+---------+------------+
|     1 |         2 |       3 | Fluffy  | 2020-11-20 |
|     2 |         3 |       3 | Fetch   | 2019-08-16 |
|     3 |         2 |       2 | Scratch | 2018-10-01 |
|     4 |         3 |       3 | Wag     | 2020-03-15 |
|     5 |         1 |       1 | Tweet   | 2020-11-28 |
|     6 |         3 |       4 | Fluffy  | 2020-09-17 |
|     7 |         3 |       2 | Bark    | NULL       |
|     8 |         2 |       4 | Meow    | NULL       |
+-------+-----------+---------+---------+------------+

Ik heb ook de SQL_CALC_FOUND_ROWS . verwijderd uit de verklaring, omdat we die deze keer niet nodig hadden.

De SQL_CALC_FOUND_ROWS weglaten Optie

Als u de SQL_CALC_FOUND_ROWS . weglaat optie, de FOUND_ROWS() functie retourneert de werkelijke aantal rijen geretourneerd. Met andere woorden, het retourneert het aantal rijen dat wordt geretourneerd na de LIMIT clausule is toegepast.

Hier is hetzelfde voorbeeld zonder de SQL_CALC_FOUND_ROWS optie:

SELECT * 
FROM Pets 
LIMIT 2;

Resultaat:

+-------+-----------+---------+---------+------------+
| PetId | PetTypeId | OwnerId | PetName | DOB        |
+-------+-----------+---------+---------+------------+
|     1 |         2 |       3 | Fluffy  | 2020-11-20 |
|     2 |         3 |       3 | Fetch   | 2019-08-16 |
+-------+-----------+---------+---------+------------+

Voer nu FOUND_ROWS() . uit :

SELECT FOUND_ROWS();

Resultaat:

+--------------+
| FOUND_ROWS() |
+--------------+
|            2 |
+--------------+

Deze keer FOUND_ROWS() 2 geretourneerd in plaats van 8 .

Query's zonder een LIMIT Clausule

Hetzelfde concept kan worden toegepast op zoekopdrachten zonder een LIMIT clausule.

Voorbeeld:

SELECT * 
FROM Pets;

Resultaat:

+-------+-----------+---------+---------+------------+
| PetId | PetTypeId | OwnerId | PetName | DOB        |
+-------+-----------+---------+---------+------------+
|     1 |         2 |       3 | Fluffy  | 2020-11-20 |
|     2 |         3 |       3 | Fetch   | 2019-08-16 |
|     3 |         2 |       2 | Scratch | 2018-10-01 |
|     4 |         3 |       3 | Wag     | 2020-03-15 |
|     5 |         1 |       1 | Tweet   | 2020-11-28 |
|     6 |         3 |       4 | Fluffy  | 2020-09-17 |
|     7 |         3 |       2 | Bark    | NULL       |
|     8 |         2 |       4 | Meow    | NULL       |
+-------+-----------+---------+---------+------------+

Voer nu FOUND_ROWS() . uit :

SELECT FOUND_ROWS();

Resultaat:

+--------------+
| FOUND_ROWS() |
+--------------+
|            8 |
+--------------+

Andere verklaringen

De FOUND_ROWS() functie kan ook worden gebruikt voor sommige andere instructies, zoals SHOW , DESCRIBE , en HELP .


  1. Een scheidingsteken toevoegen aan een aaneengeschakelde tekenreeks in MySQL - CONCAT_WS()

  2. MAX() Functie in PostgreSQL

  3. 3 gebieden die baat zullen hebben bij het gebruik van een SQL Server Performance Monitoring Tool

  4. Verschil tussen een gebruiker en een login in SQL Server