sql >> Database teknologi >  >> RDS >> MariaDB

MariaDB FOUND_ROWS() Forklaret

I MariaDB kan du bruge LIMIT klausul for at reducere antallet af rækker, der returneres af en forespørgsel. FOUND_ROWS() funktion kan bruges i sådanne forespørgsler til at returnere antallet af rækker, der ville være blevet returneret, hvis LIMIT klausul ikke medtaget.

Dette kan være praktisk, fordi det giver dig mulighed for at få disse oplysninger uden at skulle køre forespørgslen igen.

FOUND_ROWS() Funktionen kan også bruges til at returnere antallet af rækker, der faktisk blev returneret af den begrænsede sætning, hvis det er det, du har brug for.

Syntaks

Syntaksen ser sådan ud:

FOUND_ROWS()

Ingen argumenter er påkrævet eller accepteret.

For at få antallet af rækker returneret af en sætning, skal du inkludere SQL_CALC_FOUND_ROWS i sætningen, og kør derefter FOUND_ROWS() i en separat forespørgsel (når du har kørt den indledende forespørgsel).

Eksempel

Her er et eksempel for at demonstrere, hvordan funktionen fungerer.

Antag, at vi opretter en tabel som denne:

SELECT SQL_CALC_FOUND_ROWS * 
FROM Pets 
LIMIT 2;

Resultat:

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

Kun to rækker blev returneret, som angivet af LIMIT klausul.

Men lad os nu bruge FOUND_ROWS() for at se, hvor mange rækker der ville være blevet returneret, hvis vi ikke havde brugt LIMIT klausul:

SELECT FOUND_ROWS();

Resultat:

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

Det fortæller os, at otte rækker ville være blevet returneret, hvis vi ikke havde brugt LIMIT klausul.

Vi kan bekræfte dette ved at køre forespørgslen uden LIMIT klausul:

SELECT * 
FROM Pets;

Resultat:

+-------+-----------+---------+---------+------------+
| 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       |
+-------+-----------+---------+---------+------------+

Jeg fjernede også SQL_CALC_FOUND_ROWS fra redegørelsen, da vi ikke havde brug for det denne gang.

Udladelse af SQL_CALC_FOUND_ROWS Mulighed

Hvis du udelader SQL_CALC_FOUND_ROWS mulighed, FOUND_ROWS() funktion returnerer den faktiske antal returnerede rækker. Med andre ord returnerer det antallet af rækker, der returneres efter LIMIT klausul er blevet anvendt.

Her er det samme eksempel uden SQL_CALC_FOUND_ROWS mulighed:

SELECT * 
FROM Pets 
LIMIT 2;

Resultat:

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

Kør nu FOUND_ROWS() :

SELECT FOUND_ROWS();

Resultat:

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

Denne gang FOUND_ROWS() returnerede 2 i stedet for 8 .

Forespørgsler uden en LIMIT Klausul

Det samme koncept kan anvendes på forespørgsler uden en LIMIT klausul.

Eksempel:

SELECT * 
FROM Pets;

Resultat:

+-------+-----------+---------+---------+------------+
| 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       |
+-------+-----------+---------+---------+------------+

Kør nu FOUND_ROWS() :

SELECT FOUND_ROWS();

Resultat:

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

Andre erklæringer

FOUND_ROWS() funktion kan også bruges på nogle andre udsagn, såsom SHOW , DESCRIBE og HELP .


  1. Ret "Aritmetisk overløbsfejl ved konvertering af udtryk til datatype int" i SQL Server

  2. Oracle:SQL-forespørgsel, der returnerer rækker med kun numeriske værdier

  3. Oracle:DDL og tilbagerulning af transaktioner

  4. Forskellen mellem indre join og ydre join i SQL