Pseudocolumn ROWNUM
Oracle, yang kerap digunakan untuk had set hasil, memberikan cabaran unik apabila digabungkan dengan pesanan. Tidak seperti klausa LIMIT
MySQL, yang digunakan selepas mengisih, ROWNUM
menapis sebelum klausa ORDER BY
diproses. Ini bermakna hanya menggunakan ROWNUM
tidak akan menjamin subset tertib tertentu hasil anda.
Pendekatan Standard (Semua Versi Oracle):
Untuk mencapai kefungsian LIMIT
MySQL yang setara, gunakan pertanyaan bersarang:
<code class="language-sql">SELECT * FROM ( SELECT * FROM emp ORDER BY sal DESC ) WHERE ROWNUM <= 5;</code>
Pendekatan ini mula-mula memesan data dan kemudian menggunakan penapis ROWNUM
, memastikan 5 gaji tertinggi teratas dikembalikan.
Mengimbangi dan Mengehadkan Keputusan:
Untuk kawalan yang lebih canggih, menyatakan kedua-dua ofset dan had memerlukan pertanyaan yang lebih kompleks sedikit:
<code class="language-sql">SELECT * FROM ( SELECT a.*, ROWNUM rnum FROM ( SELECT * -- Your main query with ORDER BY clause FROM some_table ORDER BY some_column ) a WHERE ROWNUM <= :MAX_ROW_TO_FETCH ) WHERE rnum >= :MIN_ROW_TO_FETCH;</code>
Ganti :MAX_ROW_TO_FETCH
dan :MIN_ROW_TO_FETCH
dengan sempadan atas dan bawah yang anda inginkan. Ini mengambil baris dalam julat tertentu selepas membuat pesanan.
Oracle 12c dan Seterusnya: Fasal FETCH
:
Oracle 12c (dan versi yang lebih baru) menawarkan penyelesaian yang lebih elegan menggunakan klausa FETCH
:
<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>
Klausa FETCH
menyediakan cara yang lebih bersih dan lebih mudah dibaca untuk mengehadkan dan mengimbangi hasil, menjadikannya kaedah pilihan untuk Oracle 12c dan yang lebih baru. Untuk versi lama, pendekatan pertanyaan bersarang tetap diperlukan.
Atas ialah kandungan terperinci Bagaimana cara mengehadkan dan mengimbangi hasil pertanyaan di Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!