Pertanyaan rekursif pangkalan data Oracle ialah teknologi yang sangat berguna pertanyaan rekursif sering digunakan apabila menanyakan data yang kompleks seperti struktur pepohon, struktur organisasi, perhubungan hierarki, dsb. Pertanyaan rekursif membolehkan kami menggunakan satu pernyataan SQL untuk menyelesaikan pertanyaan keseluruhan struktur pokok tanpa menggunakan logik gelung kompleks untuk merentasi peringkat demi peringkat.
Artikel ini akan memperkenalkan cara melakukan pertanyaan rekursif dalam Oracle dan menunjukkan contoh untuk menggambarkan cara membuat pertanyaan perhubungan nod mudah.
1. Prinsip pertanyaan rekursif
Pertanyaan rekursif dilaksanakan berdasarkan prinsip mencantumkan jadualnya sendiri. Penyertaan sendiri merujuk kepada proses menyambung dirinya sendiri, dan pertanyaan rekursif direalisasikan melalui pemadanan kitaran setiap rekod yang disambungkan kepada dirinya sendiri.
Dalam Oracle, kita biasanya perlu menggunakan ungkapan awam WITH RECURSIVE atau CTE (Common Table Expression) untuk melaksanakan pertanyaan rekursif. Melalui CTE, kami boleh mencipta satu set jadual maya yang boleh merujuk antara satu sama lain, dengan itu memudahkan proses pertanyaan rekursif.
2. Sintaks pertanyaan rekursif
Sintaks asas pertanyaan rekursif adalah seperti berikut:
DENGAN
(
KESATUAN SEMUA
)
<
Antaranya, ungkapan awam rekursif mengandungi dua bahagian:
(1) Pemilihan awal ungkapan awam rekursif: Pemilihan awal ialah kedudukan di mana pertanyaan rekursif bermula, dan ia kembali Koleksi rekod yang sepadan dengan lajur yang ditakrifkan dalam ungkapan awam rekursif.
(2) Bahagian rekursif ekspresi awam rekursif: Bahagian rekursif ialah proses pertanyaan rekursif, yang akan meluaskan skop pertanyaan secara beransur-ansur.
Ibu pertanyaan rekursif terdiri daripada pernyataan pertanyaan dan digunakan untuk menapis dan memaparkan hasil pertanyaan rekursif.
3. Contoh pertanyaan rekursif
Seterusnya kita akan menggunakan contoh mudah untuk menunjukkan cara menggunakan pertanyaan rekursif untuk membuat pertanyaan perhubungan nod.
Dalam contoh berikut, kami menganggap bahawa terdapat jadual perhubungan nod dengan struktur berikut:
CREATE TABLE nod(
id INT PRIMARY KEY,
node_name VARCHAR2(50 ) ,
parent_id INT
);
di mana, id mewakili pengecam unik nod, node_name mewakili nama nod dan parent_id mewakili ID nod induk nod semasa.
Sekarang kami ingin menanyakan semua nod anak nod tertentu Kami boleh menggunakan pertanyaan rekursif untuk mencapai ini.
Pertama, kita perlu mencari pilihan awal, di mana kita memulakan pertanyaan kita. Dalam contoh ini, kami menentukan ID nod pertanyaan sebagai 1 dan pernyataan SQL adalah seperti berikut:
WITH node_cte(id, node_name, parent_id, level) AS
(
SELECT id, node_name, parent_id, 1 AS level FROM node WHERE id = 1 UNION ALL SELECT n.id, n.node_name, n.parent_id, level + 1 FROM node n, node_cte c WHERE n.parent_id = c.id
)
PILIH * DARI node_cte;
Dalam contoh ini, kami mencipta ungkapan awam bernama node_cte. Dalam pemilihan awal, kami memilih rekod nod dengan ID nod 1 dan menetapkan atribut tahapnya kepada 1.
Dalam bahagian rekursif, kami membuat pertanyaan ke bawah langkah demi langkah dengan menyertai jadual kami sendiri dan ungkapan awam semasa sehingga kami menemui semua nod anak. Dalam keadaan gabungan, kami menggunakan c.id untuk mewakili ID nod peringkat sebelumnya, sekali gus mencapai kesan pertanyaan rekursif.
Akhir sekali, kami menggunakan pernyataan SELECT untuk memaparkan hasil pertanyaan dan mendapatkan output berikut: 1
2 CHILD1 1 25 ANAK2 1 2
6 5 CUCU3 3
7 CUCU4 5 3
Dalam keputusan kita boleh lihat Bermula dari nod dengan nod ID 1, semua nod anak disoal , dan tahap meningkat selangkah demi selangkah.
Ringkasan:
Artikel ini memperkenalkan secara ringkas prinsip, sintaks dan contoh pertanyaan rekursif dalam pangkalan data Oracle. Pertanyaan rekursif ialah kaedah pertanyaan yang cekap dan mudah, yang sangat berguna apabila berurusan dengan data hierarki dan struktur organisasi. Mahir dalam teknologi pertanyaan rekursif boleh membantu kami memproses dan menganalisis data dengan lebih cepat serta meningkatkan kecekapan pertanyaan data.
Atas ialah kandungan terperinci Bagaimana untuk melakukan pertanyaan rekursif dalam Oracle. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!