Rumah >pangkalan data >Oracle >Bagaimana untuk menanyakan 10 rekod pertama dalam oracle

Bagaimana untuk menanyakan 10 rekod pertama dalam oracle

WBOY
WBOYasal
2022-01-25 10:37:2140775semak imbas

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 <= 10

Terdapat perbincangan dalam CSDN Berkenaan 10 rekod terdekat, seseorang memberikan kenyataan sedemikian

  SELECT a.*
  FROM torderdetail a
  WHERE ROWNUM <= 10
  ORDER BY order_date DESC

Sebab 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 <= 10

Penggunaan 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, &#39;MM&#39;) + ROWNUM - 1
  FROM DUAL
  CONNECT BY ROWNUM <= TO_NUMBER (TO_CHAR (LAST_DAY (SYSDATE), &#39;dd&#39;))

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!

Kenyataan:
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