Bases de Données / Databases

Site Web de l'équipe BD du LIP6 / LIP6 DB Web Site

Outils pour utilisateurs

Outils du site


site:enseignement:master:bdle:tmes:sqlrecursif

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
site:enseignement:master:bdle:tmes:sqlrecursif [15/12/2016 09:24] amannsite:enseignement:master:bdle:tmes:sqlrecursif [19/10/2017 11:06] (Version actuelle) hubert
Ligne 1: Ligne 1:
 +{{indexmenu_n>70}}
 +
 ====== SQL et récursion ====== ====== SQL et récursion ======
  
Ligne 4: Ligne 6:
 ===== Connexion Oracle ===== ===== Connexion Oracle =====
  
-[[http://www-bd.lip6.fr/ens/bdmd2013/index.php/ConnexionOracle]]+<del>[[http://www-bd.lip6.fr/ens/bdmd2013/index.php/ConnexionOracle]]</del> 
 + 
 +[[site:enseignement:documentation:oracle:connexionoracle]]
  
 +Quelques liens intéressants:
 +  * [[https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm|Requetes hiérarchiques]]
 ===== Chargement de Données ===== ===== Chargement de Données =====
  
Ligne 31: Ligne 37:
  
 ---- ----
-**Question 2**: Affichez tous les noeuds atteignables à partir du noeud 1 et la longueur des chemins. Ensuite, affichez également les chemins (SYS_CONNECT_BY_PATH).+**Question 2**: Exécutez la requête suivante et expliquez ce qu'elle affiche.
  
 +<code sql>
 +SELECT DISTINCT target, level, SYS_CONNECT_BY_PATH(SOURCE, '/') path
 +FROM myedges
 +START WITH SOURCE=1
 +CONNECT BY prior target=SOURCE;
 +</code>
  
  
 ---- ----
-**Question 3**: Affichez tous les pairs de noeuds dans G et la longueur des chemins entre eux (il faut utiliser CONNECT_BY_ROOT). Triez le résultats sour les attributs source et target. Ensuite, affichez également les chemins.+**Question 3**: Affichez tous les pairs de noeuds dans G et la longueur des chemins entre eux (il faut utiliser [[https://docs.oracle.com/cd/B14117_01/server.101/b10759/operators004.htm|CONNECT_BY_ROOT]]). Triez le résultats sour les attributs source et target. Ensuite, affichez également les chemins.
  
  
  
 ---- ----
-**Question 4**: Insérez les deux arcs suivants et évaluez à nouveaux les requêtes précédentes (il faudra ajouter le mot clé NOCYCLE après CONNECT BY):+**Question 4**: Insérez les deux arcs suivants et évaluez à nouveaux les requêtes précédentes (il faudra ajouter le mot clé [[https://docs.oracle.com/cd/B19306_01/server.102/b14200/queries003.htm|NOCYCLE]] après CONNECT BY):
  
 <code SQL> <code SQL>
Ligne 49: Ligne 61:
  
 ---- ----
-**Question 5**: Affichez tous les pairs de noeuds dans G et la longueur des chemins entre eux ainsi l'information si le chemin est un cycle.+**Question 5**: Affichez tous les pairs de noeuds dans G et la longueur des chemins entre eux ainsi l'information si le chemin est un cycle (.
  
  
Ligne 62: Ligne 74:
 ***Question 8**: Exécutez la requête suivante et analysez le résultat. Changez la stratégie de parcours (DEPTH FIRST, BREADTH FIRST) et l'attribut utilisé pour la détection du cycle. ***Question 8**: Exécutez la requête suivante et analysez le résultat. Changez la stratégie de parcours (DEPTH FIRST, BREADTH FIRST) et l'attribut utilisé pour la détection du cycle.
 <code SQL> <code SQL>
-with R2(a,b,l)+with R2(source,target,l)
 as ( as (
    select source,target,1 from myedges    select source,target,1 from myedges
    union all    union all
-   select r.a, m.target, r.l+1  from R2 r, myedges m where m.source=r.b+   select r.source, m.target, r.l+1  from R2 r, myedges m where m.source=r.target
 ) )
-search breadth first by set o1 +search breadth first by source set o1 
-cycle set end to 1 default 0+cycle target set end to 1 default 0
 select * from R2 select * from R2
 order by o1; order by o1;
 </code> </code>
  
-----  +
-***Question 8bis**: Caculez l'histogramme du graphe Facebook/+
  
 ---- ----
-***Question 9**: Ecrivez une requête qui retourne tous les pairs de noeuds et la longueur du plus court chemin.+**Question 9**: Ecrivez une requête qui retourne tous les pairs de noeuds et la longueur du plus court chemin.
  
    
Ligne 139: Ligne 150:
 **Question 4.1** : Question 4 en utilisant une requête récursive (clause WITH et sans CONNECT_BY). Pour construire le chemin on peut concaténer deux chaînes de caractères en utilisant  || (Exemple: '/' || chaîne  ajoute '/' devant chaîne).  **Question 4.1** : Question 4 en utilisant une requête récursive (clause WITH et sans CONNECT_BY). Pour construire le chemin on peut concaténer deux chaînes de caractères en utilisant  || (Exemple: '/' || chaîne  ajoute '/' devant chaîne). 
  
 +---- 
 +**Question 4.2** : Au lieu d'exécuter la requête, on veut obtenir des statistiques sur les coûts. Pour cela, il faut exécuter d'abord la commande suivante, avant de reexécuter la requête:
 +
 +<code>
 +SET autotrace trace stat
 +</code>
 +
 +Exécutez la requête précédente (ou d'autres requêtes) et étudiez les statistiques observées:
 +
 +Explications :{{https://docs.oracle.com/cd/B10500_01/server.920/a96533/autotrac.htm}}
 +
 +Avant de conteinuer, il faut faire:
 +<code>
 +SET autotrace off
 +</code>
  
 ---- ----
Ligne 161: Ligne 187:
  
 <code SQL> <code SQL>
-Create VIEW edges_view(usr, neighbor) AS( SELECT usr, neighbor FROM edges UNION ALL SELECT neighbor,usr FROM edges);+Create VIEW edges_view(usr, neighbor) AS (  
 +   SELECT usr, neighbor FROM edges  
 + UNION ALL  
 +   SELECT neighbor,usr FROM edges 
 +);
 </code> </code>
  
Ligne 172: Ligne 202:
  
 Résultat: 34 Résultat: 34
 +
 +---- 
 +***Question 8bis**: Calculez l'histogramme du graphe Facebook.
  
 ---- ----
site/enseignement/master/bdle/tmes/sqlrecursif.1481790283.txt.gz · Dernière modification : de amann