Rumah > pangkalan data > tutorial mysql > Bagaimana cara mengehadkan dan mengimbangi hasil pertanyaan di Oracle?

Bagaimana cara mengehadkan dan mengimbangi hasil pertanyaan di Oracle?

Mary-Kate Olsen
Lepaskan: 2025-01-25 08:52:11
asal
884 orang telah melayarinya

How to Efficiently Limit and Offset Query Results in Oracle?

Menguasai Pengehadan Baris dan Mengimbangi dalam Pertanyaan Oracle

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan