Rumah > Artikel > pangkalan data > Bagaimana untuk menanyakan nod anak secara rekursif dalam Oracle
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".
Persekitaran pengendalian tutorial ini: sistem Windows 10, versi Oracle 11g, komputer Dell G3.
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!