Menerap LIMIT MySQL dalam Oracle SQL
KlausaMySQL LIMIT
memudahkan mendapatkan semula bilangan baris tertentu selepas membuat pesanan, penting untuk penomboran data. Oracle, bagaimanapun, memerlukan pendekatan yang berbeza.
Mengapa ROWNUM Tidak Cukup
Walaupun pseudocolumn ROWNUM
Oracle mungkin kelihatan seperti penyelesaian, ia digunakan sebelum klausa ORDER BY
. Ini bermakna menggunakan ROWNUM
untuk julat baris tersusun menghasilkan hasil yang tidak dapat diramalkan.
Pendekatan Subkueri Berkesan
Kaedah yang boleh dipercayai melibatkan subkueri untuk memesan data dahulu, kemudian memohon ROWNUM
untuk mengehadkan:
<code class="language-sql">SELECT * FROM ( SELECT * FROM emp ORDER BY sal DESC ) WHERE ROWNUM <= 5;</code>
Menentukan Sempadan Atas dan Bawah
Untuk kawalan yang lebih tepat, menyatakan kedua-dua nombor baris minimum dan maksimum memerlukan pertanyaan yang lebih kompleks:
<code class="language-sql">SELECT * FROM ( SELECT a.*, ROWNUM rnum FROM ( SELECT * FROM <your_table> ORDER BY <your_column> ) a WHERE ROWNUM <= :MAX_ROW_TO_FETCH ) WHERE rnum >= :MIN_ROW_TO_FETCH;</code>
Penambahan Oracle 12c dan Kemudian
Oracle 12c dan versi yang lebih baru menawarkan penyelesaian yang lebih bersih menggunakan FETCH FIRST
dan OFFSET
:
<code class="language-sql">-- Retrieve the first 10 rows SELECT * FROM sometable ORDER BY name FETCH FIRST 10 ROWS ONLY; -- Retrieve rows 20-30 SELECT * FROM sometable ORDER BY name OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;</code>
Sintaks diperkemas ini menyediakan cara yang lebih intuitif untuk mengurus had baris dan mengimbangi dalam Oracle.
Atas ialah kandungan terperinci Bagaimana untuk Meniru Klausa LIMIT MySQL dengan Berkesan dalam Pertanyaan Oracle SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!