Maison  >  Article  >  base de données  >  Un article analysant la requête de structure arborescente ORACLE

Un article analysant la requête de structure arborescente ORACLE

WBOY
WBOYavant
2022-09-05 17:48:242517parcourir

Cet article vous apporte des connaissances pertinentes sur Oracle. Il présente principalement un article sur l'analyse des requêtes de structure arborescente ORACLE. L'article se concentre sur le sujet et fournit un contenu détaillé. J'espère que cela vous sera utile. tout le monde.

Un article analysant la requête de structure arborescente ORACLE

Tutoriel recommandé : "Tutoriel vidéo Oracle"

Dans la programmation quotidienne, on rencontre souvent la représentation de structures arborescentes, comme les organisations, les divisions administratives, etc. Ceux-ci sont souvent affichés via un tableau dans la base de données. Nous prenons ici comme exemple une simple table de division administrative. En utilisation réelle, d'autres champs et niveaux de description peuvent y être ajoutés.

La table est associée à l'ID et au PID pour réaliser le stockage de la structure arborescente. La création de la table et les instructions de données sont les suivantes :

-- Create table
create table TREETEST
(
  id   NVARCHAR2(50),
  pid  NVARCHAR2(50),
  name NVARCHAR2(50)
)
insert into TREETEST (ID, PID, NAME) values ('1', null, '山东省');
insert into TREETEST (ID, PID, NAME) values ('2', '1', '青岛市');
insert into TREETEST (ID, PID, NAME) values ('3', '1', '烟台市');
insert into TREETEST (ID, PID, NAME) values ('4', null, '河南省');
insert into TREETEST (ID, PID, NAME) values ('5', null, '河北省');
insert into TREETEST (ID, PID, NAME) values ('6', '2', '市南区');
insert into TREETEST (ID, PID, NAME) values ('7', '2', '市北区');
insert into TREETEST (ID, PID, NAME) values ('8', '2', '即墨市');

Comment interroger la structure arborescente ? Oracle fournit une requête récursive pour la requête. La syntaxe de base est la suivante :

SELECT [Column]…..
  FEOM [Table]
  WHERE Conditional1
  START WITH Conditional2
  CONNECT BY PRIOR Conditional3
  ORDER BY [Column]

Description :

  • Condition 1 --- Filtrer les conditions, filtrer tous les enregistrements renvoyés.
  • Condition 2---La condition limite du nœud racine. Bien sûr, vous pouvez également assouplir les autorisations pour obtenir plusieurs nœuds racines, c'est-à-dire obtenir plusieurs arbres.
  • Condition 3---La condition de lien, le but. est de donner la relation entre le père et le fils. Quoi, effectuez une requête récursive basée sur cette relation (ID=PID dans le tableau ci-dessus)
  • Tri --- Trier tous les enregistrements renvoyés

Regardons des exemples spécifiques ci-dessous :

1. Interroger Shandong Tous les nœuds enfants situés sous la province

SELECT *
  FROM TREETEST t
 START WITH t.PID=1
CONNECT BY PRIOR t.ID = t.PID

Celui avec l'ID 1 est le nœud de la province du Shandong. Les résultats de la requête sont les suivants :

2. Nœud enfant de niveau de la ville de Qingdao (notez qu'il est différent de ce qui précède, tous les nœuds enfants et les nœuds enfants de niveau suivant)

Un article analysant la requête de structure arborescente ORACLE

3 Si vous devez connecter la ville de Qingdao, la province du Shandong, etc. , vous pouvez utiliser SYS_CONNECT_BY_PATH pour obtenir

SELECT t.ID, SYS_CONNECT_BY_PATH(t.NAME, '\') AS INDU_NAME
  FROM TREETEST t
 START WITH t.PID IS NULL
CONNECT BY PRIOR t.ID = t.PID

Les résultats de la requête sont les suivants :

4. De la même manière, vous pouvez également interroger de bas en haut

SELECT *
  FROM TREETEST t
 START WITH t.ID=8
CONNECT BY t.ID = PRIOR t.PID

Recommandé. tutoriel : "Tutoriel vidéo Oracle"

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer