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.