Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
site:enseignement:master:bdle:tmes:sqlrecursif [16/12/2016 11:16] amine [Connexion Oracle] |
site: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 35: | 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 53: | 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 66: | 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 a set o1 | + | search breadth first by source set o1 |
- | cycle a 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 195: | Ligne 202: | ||
Résultat: 34 | Résultat: 34 | ||
+ | |||
+ | ---- | ||
+ | ***Question 8bis**: Calculez l'histogramme du graphe Facebook. | ||
---- | ---- |