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

Bagaimana untuk menanyakan 10 rekod pertama dalam oracle

WBOY
Lepaskan: 2022-01-25 10:37:21
asal
40737 orang telah melayarinya

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

Bagaimana untuk menanyakan 10 rekod pertama dalam oracle

Persekitaran pengendalian tutorial ini: sistem Windows 10, versi Oracle 11g, komputer Dell G3.

Bagaimana untuk menanyakan 10 rekod teratas dalam Oracle

Bagaimana untuk menanyakan 10 rekod teratas dalam jadual dalam Oracle?

  select *
  from test
  where rownum <=10
Salin selepas log masuk

Berikut ialah pengenalan kepada rownum

Penggunaan Rownum dan row_number() over()

ROWNUM ialah lajur pseudo yang disediakan oleh Oracle bermula dari 8 . Nomborkan hasil daripada SQL, sentiasa bermula dari 1. Kegunaan biasa adalah untuk mengeluarkan dalam halaman

Contohnya,

  SELECT *
  FROM torderdetail a
  WHERE ROWNUM <= 10
Salin selepas log masuk

Pernyataan ini adalah untuk mengeluarkan 10 rekod pertama, di sini. Tujuannya adalah serupa dengan bahagian atas sql sever, tetapi rownum harus dikatakan lebih berkuasa untuk output julat nombor yang ditentukan

  SELECT *
  FROM (SELECT a.*, ROWNUM rn
  FROM torderdetail a)
  WHERE rn >= 10 AND rn <= 20
Salin selepas log masuk

Pernyataan ini adalah untuk mengeluarkan rekod ke-10 hingga ke-20 mengapa rownum rn digunakan di sini , adalah untuk menukar rownum menjadi contoh, kerana rownum itu sendiri hanya boleh menggunakan kaedah perbandingan <= dan hanya boleh ditukar kepada lajur sebenar, supaya >= 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
Salin selepas log masuk

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

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

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

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!

Label berkaitan:
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan