MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

MariaDB ROWNUM() Wyjaśnione

W MariaDB, ROWNUM() to wbudowana funkcja, która zwraca bieżącą liczbę akceptowanych wierszy w bieżącym kontekście. Jego głównym celem jest emulacja ROWNUM pseudokolumna w Oracle.

ROWNUM() może być używany w sposób podobny do LIMIT klauzula – aby ograniczyć liczbę wyników zwracanych przez zapytanie.

W trybie Oracle można go wywołać jako ROWNUM (tj. bez nawiasów).

ROWNUM() funkcja jest obsługiwana z MariaDB 10.6.1.

Składnia

Składnia wygląda tak:

ROWNUM()

Żadne argumenty nie są wymagane ani akceptowane.

W trybie Oracle można go wywołać bez nawiasów, w następujący sposób:

ROWNUM

Użycie tej składni naśladuje ROWNUM pseudokolumna w Oracle.

Przykład

Uruchommy zapytanie, które zwróci wszystkie wiersze z tabeli o nazwie Pets :

SELECT 
    ROWNUM(),
    PetId,
    PetName
FROM Pets;

Wynik:

+----------+-------+---------+
| ROWNUM() | PetId | PetName |
+----------+-------+---------+
|        1 |     1 | Fluffy  |
|        2 |     2 | Fetch   |
|        3 |     3 | Scratch |
|        4 |     4 | Wag     |
|        5 |     5 | Tweet   |
|        6 |     6 | Fluffy  |
|        7 |     7 | Bark    |
|        8 |     8 | Meow    |
+----------+-------+---------+
8 rows in set (0.001 sec)

Widzimy, że zwrócono osiem wierszy.

Wartość zwrócona przez ROWNUM() funkcja zwiększa się z każdym wierszem. W tym przypadku zdarza się, że pokrywa się z wartościami w PetId kolumna, ale jest to czysto przypadkowe. PetId kolumna mogła użyć dowolnej wartości, ale ROWNUM() pozostanie taka, jaka jest tutaj.

Aby zilustrować, o co mi chodzi, doprecyzujmy zapytanie, aby zwracało mniej wyników:

SELECT 
    ROWNUM(),
    PetId,
    PetName
FROM Pets
WHERE PetId > 4;

Wynik:

+----------+-------+---------+
| ROWNUM() | PetId | PetName |
+----------+-------+---------+
|        1 |     5 | Tweet   |
|        2 |     6 | Fluffy  |
|        3 |     7 | Bark    |
|        4 |     8 | Meow    |
+----------+-------+---------+
4 rows in set (0.010 sec)

Ograniczenie zwracanych wierszy

Jak wspomniano, ROWNUM() może być używany w sposób podobny do LIMIT klauzula – aby ograniczyć liczbę wyników zwracanych przez zapytanie.

Oto przykład:

SELECT 
    ROWNUM(),
    PetId,
    PetName
FROM Pets
WHERE ROWNUM() <= 5;

Wynik:

+----------+-------+---------+
| ROWNUM() | PetId | PetName |
+----------+-------+---------+
|        1 |     1 | Fluffy  |
|        2 |     2 | Fetch   |
|        3 |     3 | Scratch |
|        4 |     4 | Wag     |
|        5 |     5 | Tweet   |
+----------+-------+---------+
5 rows in set (0.001 sec)

Oto jak uzyskalibyśmy ten sam efekt przy użyciu LIMIT klauzula:

SELECT 
    ROWNUM(),
    PetId,
    PetName
FROM Pets
LIMIT 5;

Wynik:

+----------+-------+---------+
| ROWNUM() | PetId | PetName |
+----------+-------+---------+
|        1 |     1 | Fluffy  |
|        2 |     2 | Fetch   |
|        3 |     3 | Scratch |
|        4 |     4 | Wag     |
|        5 |     5 | Tweet   |
+----------+-------+---------+
5 rows in set (0.001 sec)

Istnieje różnica między używaniem LIMIT i ROWNUM() aby ograniczyć zwracane wiersze.

Główna różnica polega na tym, że LIMIT działa na zestawie wyników, gdy ROWNUM działa na liczbie zaakceptowanych wierszy (przed każdym ORDER lub GROUP BY klauzul).

Oto przykład, który pokazuje tę różnicę:

SELECT 
    ROWNUM(),
    PetId,
    PetName
FROM Pets
WHERE ROWNUM() <= 5
ORDER BY PetId Desc;

Wynik:

+----------+-------+---------+
| ROWNUM() | PetId | PetName |
+----------+-------+---------+
|        5 |     5 | Tweet   |
|        4 |     4 | Wag     |
|        3 |     3 | Scratch |
|        2 |     2 | Fetch   |
|        1 |     1 | Fluffy  |
+----------+-------+---------+
5 rows in set (0.129 sec)

A tutaj używa LIMIT klauzula:

SELECT 
    ROWNUM(),
    PetId,
    PetName
FROM Pets
ORDER BY PetId Desc
LIMIT 5;

Wynik:

+----------+-------+---------+
| ROWNUM() | PetId | PetName |
+----------+-------+---------+
|        8 |     8 | Meow    |
|        7 |     7 | Bark    |
|        6 |     6 | Fluffy  |
|        5 |     5 | Tweet   |
|        4 |     4 | Wag     |
+----------+-------+---------+
5 rows in set (0.000 sec)

Pomijanie nawiasów

Podczas pracy w trybie Oracle można pominąć nawiasy. W ten sposób możesz emulować ROWNUM pseudokolumna w Oracle.

Oto przykład przejścia do trybu Oracle:

SET SQL_MODE='ORACLE';

Teraz możemy uruchomić ROWNUM bez nawiasów:

SELECT 
    ROWNUM,
    PetId,
    PetName
FROM Pets;

Wynik:

+--------+-------+---------+
| ROWNUM | PetId | PetName |
+--------+-------+---------+
|      1 |     1 | Fluffy  |
|      2 |     2 | Fetch   |
|      3 |     3 | Scratch |
|      4 |     4 | Wag     |
|      5 |     5 | Tweet   |
|      6 |     6 | Fluffy  |
|      7 |     7 | Bark    |
|      8 |     8 | Meow    |
+--------+-------+---------+
8 rows in set (0.029 sec)

Zauważ, że jest to dostępne tylko w trybie Oracle. Korzystanie z ROWNUM bez nawiasów, gdy nie jest w trybie Oracle, powoduje błąd.

Aby zademonstrować, przejdźmy do trybu domyślnego:

SET SQL_MODE=DEFAULT;

Teraz uruchom zapytanie ponownie:

SELECT 
    ROWNUM,
    PetId,
    PetName
FROM Pets;

Wynik:

ERROR 1054 (42S22): Unknown column 'ROWNUM' in 'field list'

Zapoznaj się z dokumentacją MariaDB, aby zapoznać się z niektórymi zagadnieniami dotyczącymi optymalizacji i innymi czynnikami.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Proaktywne monitorowanie MySQL (Studio Deweloperskie/Advisors Angle)

  2. Porównanie ofert chmury klastrowej Galera:część trzecia Microsoft Azure

  3. MariaDB ROUND() a OBCIĄŻENIE()

  4. Automatyzacja baz danych za pomocą Puppet:wdrażanie replikacji MySQL i MariaDB

  5. Odkrywanie różnych sposobów szyfrowania danych MariaDB