MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

MariaDB ROWNUM() Dijelaskan

Di MariaDB, ROWNUM() adalah fungsi bawaan yang mengembalikan jumlah baris yang diterima saat ini dalam konteks saat ini. Tujuan utamanya adalah untuk meniru ROWNUM kolom semu di Oracle.

ROWNUM() dapat digunakan dengan cara yang memiliki efek yang mirip dengan LIMIT klausa – untuk membatasi jumlah hasil yang dikembalikan oleh kueri.

Ketika dalam mode Oracle, itu bisa disebut sebagai ROWNUM (yaitu tanpa tanda kurung).

 ROWNUM() fungsi didukung dari MariaDB 10.6.1.

Sintaks

Sintaksnya seperti ini:

ROWNUM()

Tidak ada argumen yang diperlukan, atau diterima.

Ketika dalam mode Oracle, itu dapat dipanggil tanpa tanda kurung, seperti ini:

ROWNUM

Menggunakan sintaks ini meniru ROWNUM kolom semu di Oracle.

Contoh

Mari kita jalankan kueri yang mengembalikan semua baris dari tabel yang disebut Pets :

SELECT 
    ROWNUM(),
    PetId,
    PetName
FROM Pets;

Hasil:

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

Kita dapat melihat bahwa delapan baris dikembalikan.

Nilai yang dikembalikan oleh ROWNUM() fungsi meningkat dengan setiap baris. Dalam hal ini, kebetulan bertepatan dengan nilai dalam PetId kolom, tapi ini murni kebetulan. PetId kolom dapat menggunakan nilai apa pun, tetapi ROWNUM() akan tetap seperti di sini.

Untuk mengilustrasikan apa yang saya maksud, mari perbaiki kueri untuk mengembalikan lebih sedikit hasil:

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

Hasil:

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

Membatasi Baris yang Dikembalikan

Seperti disebutkan, ROWNUM() dapat digunakan dengan cara yang memiliki efek yang mirip dengan LIMIT klausa – untuk membatasi jumlah hasil yang dikembalikan oleh kueri.

Ini contohnya:

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

Hasil:

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

Inilah cara kami mendapatkan efek yang sama menggunakan LIMIT klausa:

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

Hasil:

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

Ada perbedaan antara menggunakan LIMIT dan ROWNUM() untuk membatasi baris yang dikembalikan.

Perbedaan utamanya adalah LIMIT bekerja pada kumpulan hasil saat ROWNUM bekerja pada jumlah baris yang diterima (sebelum ORDER atau GROUP BY klausa).

Berikut adalah contoh yang menunjukkan perbedaan ini:

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

Hasil:

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

Dan ini dia menggunakan LIMIT klausa:

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

Hasil:

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

Menghilangkan Tanda kurung

Saat berjalan dalam mode Oracle, Anda dapat menghilangkan tanda kurung. Melakukan hal ini memungkinkan Anda untuk meniru ROWNUM kolom semu di Oracle.

Berikut ini contoh beralih ke mode Oracle:

SET SQL_MODE='ORACLE';

Sekarang kita dapat menjalankan ROWNUM tanpa tanda kurung:

SELECT 
    ROWNUM,
    PetId,
    PetName
FROM Pets;

Hasil:

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

Perhatikan bahwa ini hanya tersedia ketika dalam mode Oracle. Menggunakan ROWNUM tanpa tanda kurung saat tidak dalam mode Oracle menghasilkan kesalahan.

Untuk mendemonstrasikannya, mari beralih ke mode default:

SET SQL_MODE=DEFAULT;

Sekarang jalankan kueri lagi:

SELECT 
    ROWNUM,
    PetId,
    PetName
FROM Pets;

Hasil:

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

Lihat dokumentasi MariaDB untuk beberapa pertimbangan seputar pengoptimalan dan faktor lainnya.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Enkripsi Basis Data:Mengapa dan Di Mana Anda Perlu Memiliki Enkripsi Data

  2. Benchmarking Manual Database Deployment vs Deployment Otomatis

  3. Bagaimana SYS_GUID() Bekerja di MariaDB

  4. Unit Tanggal dan Waktu MariaDB

  5. Firewall SQL Menjadi Mudah dengan ClusterControl &ProxySQL