Maison > base de données > Oracle > Comment faire une requête récursive dans Oracle

Comment faire une requête récursive dans Oracle

PHPz
Libérer: 2023-04-18 09:24:10
original
6278 Les gens l'ont consulté

La requête récursive de la base de données Oracle est une technologie très utile. La requête récursive est souvent utilisée lors de l'interrogation de données complexes telles que la structure arborescente, la structure organisationnelle, la relation hiérarchique, etc. La requête récursive nous permet d'utiliser une seule instruction SQL pour compléter la requête de l'ensemble de la structure arborescente sans utiliser une logique de boucle complexe pour parcourir niveau par niveau.

Cet article expliquera comment effectuer des requêtes récursives dans Oracle et montrera un exemple pour illustrer comment interroger une simple relation de nœuds.

1. Le principe de la requête récursive

La requête récursive est implémentée sur la base du principe de joindre sa propre table. L'auto-adhésion fait référence au processus de connexion elle-même, et la requête récursive est réalisée par une correspondance cyclique de chaque enregistrement connecté à lui-même.

Dans Oracle, nous devons généralement utiliser une expression publique AVEC RECURSIVE ou CTE (Common Table Expression) pour implémenter des requêtes récursives. Grâce à CTE, nous pouvons créer un ensemble de tables virtuelles pouvant se référencer les unes les autres, simplifiant ainsi le processus de requêtes récursives.

2. Syntaxe de la requête récursive

La syntaxe de base de la requête récursive est la suivante :

AVEC( ) AS
(

UNION ALL

)

Parmi eux, l'expression publique récursive contient deux parties :

(1) Récursion Sélection initiale de l'expression commune : La sélection initiale est l'endroit où commence la requête récursive, renvoyant un ensemble d'enregistrements qui correspondent aux colonnes définies dans l'expression commune récursive.

(2) La partie récursive de l'expression publique récursive : La partie récursive est un processus de requête récursif, qui élargira progressivement la portée de la requête.

Le corps de la requête récursive est composé d'instructions de requête et est utilisé pour filtrer et afficher les résultats de la requête récursive.

3. Exemple de requête récursive

Ensuite, nous utiliserons un exemple simple pour montrer comment utiliser une requête récursive pour interroger les relations de nœuds.

Dans l'exemple suivant, nous supposons qu'il existe une table de relations entre nœuds avec la structure suivante :

CREATE TABLE node(
id INT PRIMARY KEY,
node_name VARCHAR2(50),
parent_id INT
);

where, id Indique l'identifiant unique du nœud, node_name indique le nom du nœud et parent_id indique l'ID du nœud parent du nœud actuel.

Maintenant, nous voulons interroger tous les nœuds enfants d'un certain nœud. Nous pouvons utiliser une requête récursive pour y parvenir.

Tout d’abord, nous devons trouver un choix initial, c’est là que nous commençons notre requête. Dans cet exemple, nous spécifions l'ID du nœud de requête comme 1 et l'instruction SQL est la suivante :

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
Copier après la connexion

)
SELECT * FROM node_cte;

In Dans cet exemple, nous avons créé une expression publique appelée node_cte. Lors de la sélection initiale, nous avons sélectionné l'enregistrement de nœud avec l'ID de nœud 1 et défini son attribut de niveau sur 1.

Dans la partie récursive, nous interrogeons vers le bas étape par étape en connectant notre propre table et l'expression publique actuelle jusqu'à ce que nous trouvions tous les nœuds enfants. Dans la condition de jointure, nous utilisons c.id pour représenter l'ID de nœud du niveau précédent, obtenant ainsi l'effet d'une requête récursive.

finalement, nous utilisons l'instruction SELECT pour afficher les résultats de la requête et obtenir la sortie suivante:

id

2 Child1 1 1 2

3 petit-enfant1 2 3
4 petit-enfant2 2 3
5 Child2 1 2d6 petit-enfant3 5 3
7 petit-enfant4 5 3

Dans le résultat, nous pouvons voir qu'à partir des nœuds avec l'ID de nœud à 1, vérifiez tous les sous-nœuds, les niveaux augmentent étape par étape.

Résumé :

Cet article présente brièvement le principe, la syntaxe et un exemple de requête récursive dans une base de données Oracle. La requête récursive est une méthode de requête efficace et pratique, très utile lorsqu'il s'agit de données hiérarchiques et de structure organisationnelle. La maîtrise de la technologie de requêtes récursives peut nous aider à traiter et à analyser les données plus rapidement et à améliorer l'efficacité des requêtes de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal