Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk menanyakan nod anak secara rekursif dalam Oracle

Bagaimana untuk menanyakan nod anak secara rekursif dalam Oracle

WBOY
WBOYasal
2022-01-25 14:38:033359semak imbas

Dalam Oracle, anda boleh menggunakan pernyataan pilih untuk menanyakan nod anak secara rekursif Fungsi pernyataan ini adalah untuk melakukan pertanyaan ringkas pada data jadual MENGIKUT keadaan SEBELUM 2 DI MANA Syarat 3".

Bagaimana untuk menanyakan nod anak secara rekursif dalam Oracle

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

Cara oracle secara rekursif menanyakan nod anak

Struktur tatabahasa

SELECT ... FROM    + 表名  START WITH + 条件1 CONNECT BY PRIOR + 条件2  WHERE  + 条件3

Syarat 1: Ia adalah pernyataan kelayakan nod akar Sudah tentu, syarat kelayakan boleh santai untuk mendapatkan berbilang akar, iaitu, berbilang pokok dalam hubungan sambungan, selain penyenaraian, ungkapan lajur juga dibenarkan. Klausa START WITH adalah pilihan dan digunakan untuk mengenal pasti nod yang digunakan sebagai nod akar struktur pepohon carian. Jika klausa ini ditinggalkan, ini bermakna semua baris yang memenuhi syarat pertanyaan digunakan sebagai nod akar.

Syarat 2: Ia adalah syarat sambungan, di mana PRIOR digunakan untuk mewakili rekod sebelumnya Contohnya, CONNECT BY PRIOR STUDENT_ID = GRADE_ID, yang bermaksud STUDENT_ID rekod sebelumnya ialah GRADE_ID ini. rekod, iaitu bapa rekod ini adalah rekod sebelumnya. Klausa CONNECT BY menunjukkan bahawa setiap baris data akan diambil dalam susunan hierarki dan menentukan bahawa data dalam jadual akan disambungkan ke dalam hubungan berstruktur pepohon. Operator PRIOR mesti diletakkan di hadapan salah satu daripada dua lajur perhubungan gabungan. Untuk perhubungan induk-anak antara nod, pengendali PRIOR mewakili nod induk pada satu sisi dan nod anak di sisi lain, dengan itu menentukan sama ada susunan struktur pokok dicari adalah atas ke bawah atau bawah ke atas.

Syarat 3: Ia adalah keadaan penapisan, digunakan untuk menapis rekod yang dikembalikan.

Nota:

1, CONNECT BY PRIOR digunakan dalam pertanyaan berstruktur;

2, peranan MULAKAN DENGAN... CONNECT BY PRIOR..., Ringkasnya , ia adalah untuk menyimpan struktur pokok dalam jadual.

Melintasi nod anak ke nod akar.

select * from persons.dept start with deptid=76 connect by prior paredeptid=deptid

Melintasi nod akar nod anak (tidak termasuk nod akar).

select * from persons.dept start with paredeptid=0 connect by prior deptid=paredeptid

Melintasi melalui nod akar Nod anak (termasuk nod akar).

select * from persons.dept start with deptid=0 connect by prior deptid=paredeptid

Anda boleh menanyakan tahap melalui kata kunci tahap.

select a.*,level from persons.dept a start with paredeptid=0 connect by prior deptid=paredeptid

Catatan:

mulakan dengan .. Dalam penggunaan .connect by, yang berikut bermula dengan ialah benih rekursif.

Benih rekursi ialah tempat rekursif bermula "sebelumnya" selepas disambungkan oleh Jika lalai: hanya baris permulaan yang memenuhi syarat boleh ditanya dan tiada pertanyaan rekursif akan dilakukan;

Medan yang diletakkan selepas sambung dengan sebelumnya adalah berkaitan dan menunjukkan arah pertanyaan.

Latihan: Dapatkan nod teratas melalui nod anak

select FIRST_VALUE(deptid) OVER (ORDER BY LEVEL DESC ROWS UNBOUNDED PRECEDING) AS firstdeptid from persons.dept start with deptid=76 connect by prior paredeptid=deptid

Struktur jadual

DEPTID PAREDEPTID NAME
NUMBER NUMBER CHAR (40 Byte)

id Jabatan Id jabatan induk (kepunyaan id jabatan mana) Nama jabatan

Tutorial yang disyorkan: "Tutorial Video Oracle"

Atas ialah kandungan terperinci Bagaimana untuk menanyakan nod anak secara rekursif 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