Rumah >pangkalan data >Oracle >Bagaimana untuk menanyakan 10 rekod pertama dalam oracle
Dalam Oracle, anda boleh menggunakan klausa where dengan rownum untuk menanyakan sepuluh rekod pertama The where clause digunakan untuk mengehadkan syarat pertanyaan, dan rownum digunakan untuk mengehadkan jumlah bilangan baris yang dikembalikan untuk. pertanyaan. Sintaks ialah "pilih * dari Nama jadual di mana rownum bdfc71fc093a6a0e54ddd54312a18ad2= perbandingan boleh dilakukan.
Dalam aplikasi praktikal, selalunya diperlukan untuk mendapatkan rekod terkini, yang memerlukan mengisih rekod dahulu dan kemudian mendapatkan rownum <=
Yang biasa digunakan
SELECT * FROM (SELECT a.* FROM torderdetail a ORDER BY order_date DESC) WHERE ROWNUM <= 10Terdapat perbincangan dalam CSDN Berkenaan 10 rekod terdekat, seseorang memberikan kenyataan sedemikian
SELECT a.* FROM torderdetail a WHERE ROWNUM <= 10 ORDER BY order_date DESCSebab mengapa kenyataan sedemikian muncul terutamanya dari perspektif kecekapan keseluruhan jadual, kemudian susun, dan kemudian ambil 10 rekod Pernyataan terakhir tidak akan mengimbas keseluruhan jadual, tetapi hanya akan mengambil 10 rekod Jelas sekali, kecekapan pernyataan terakhir akan lebih tinggi.
Kemudian mengapakah terdapat pertikaian? Keputusan mengeluarkan kedua-dua pesanan adalah betul-betul bertentangan Pengisihan dahulu dan kemudian mengambil 10 rekod akan mengambil 10 rekod terbaharu dan mengambil 10 rekod dahulu dan kemudian mengisih akan mengeluarkan 10 rekod yang terawal. Untuk kenyataan ini, secara amnya dipercayai bahawa perintah pelaksanaan adalah untuk mengambil 10 rekod dahulu dan kemudian mengisihnya. Jadi kenyataan ini sepatutnya menjadi ralat. Tetapi ini sebenarnya tidak berlaku. Perintah pelaksanaan pernyataan ini berkaitan dengan medan pesanan oleh Jika medan pesanan anda oleh adalah pk, ia diisih dahulu, dan kemudian 10 item diambil (lebih cepat daripada pernyataan pertama. ), dan medan pengisihan Apabila ia bukan PK, 10 item diambil dahulu dan kemudian diisih Pada masa ini, keputusan adalah berbeza daripada keperluan, jadi cara penulisan kedua mesti memastikan keputusan adalah betul apabila medan pengisihan. adalah kunci utama.
Fungsi analisis Row_number() over() telah disediakan sejak 9I Tujuan amnya adalah serupa dengan rownum.
Kaedah penulisan umum row_number() over(order by order_date desc) menjana susunan yang sama seperti pernyataan rownum, dan kecekapan adalah sama (untuk pernyataan rownum yang juga mempunyai susunan oleh), jadi dalam ini kes kedua-dua Penggunaan adalah sama.
Untuk mengambil 10 rekod terkini selepas pengumpulan, rownum tidak boleh mencapainya Pada masa ini, hanya row_number() over(partition by group order field by sorting field) boleh mencapai grouping Number, untuk. contoh, jika anda ingin mendapatkan 10 rekod pesanan terakhir setiap hari pada bulan lalu
SELECT * FROM (SELECT a.*, ROW_NUMBER () OVER (PARTITION BY TRUNC (order_date) ORDER BY order_date DESC) rn FROM torderdetail a) WHERE rn <= 10Penggunaan alternatif Rownum, kadangkala kami akan menghadapi permintaan seperti ini, meminta untuk mengeluarkan semua hari bulan, ramai orang akan Bimbang, tidak ada jadual sedemikian dalam pangkalan data, bagaimana saya boleh mengeluarkan semua hari dalam sebulan? Ia boleh diselesaikan dengan rownum:
SELECT TRUNC (SYSDATE, 'MM') + ROWNUM - 1 FROM DUAL CONNECT BY ROWNUM <= TO_NUMBER (TO_CHAR (LAST_DAY (SYSDATE), 'dd'))Tutorial yang disyorkan: "Tutorial Video Oracle"
Atas ialah kandungan terperinci Bagaimana untuk menanyakan 10 rekod pertama dalam oracle. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!