PLU
Niels
Ressource R2.06 TP1: Rappel
Exploitation d'une Base de Données
Q1 -
Select distinct nom_commune, nomfo
from [Link], [Link], [Link]
where commune.code_insee=distribution.code_insee
and commune.nom_commune='Nantes'
and [Link]=[Link];
Tables : [Link], [Link], [Link]
Jointures : commune.code_insee=distribution.code_insee ET
[Link]=[Link]
Sortie :
Q2 -
Select nom_commune, nomfo
from [Link], [Link], [Link]
where commune.code_insee=distribution.code_insee
and [Link]='5G'
and commune.nom_commune='Nantes'
and [Link]=[Link];
Tables : [Link], [Link], [Link]
Jointures : commune.code_insee=distribution.code_insee ET
[Link]=[Link]
Sortie :
Q3 -
Select nom_commune, nomfo, adresse
from [Link], [Link], [Link]
where commune.code_insee=distribution.code_insee
and [Link]='5G'
and commune.nom_commune='Nantes'
and [Link]='5G NR 3500'
and [Link]=[Link]
ORDER BY adresse;
Tables : [Link], [Link], [Link]
Jointures : commune.code_insee=distribution.code_insee ET
[Link]=[Link]
Sortie :
Q4 -
Select nom_commune, nomfo, generation
from [Link], [Link], [Link]
where commune.code_insee=distribution.code_insee
and [Link]=[Link]
and [Link]='5G';
Tables : [Link], [Link], [Link]
Jointures : commune.code_insee=distribution.code_insee ET
[Link]=[Link]
Sortie :
Q5-
Select nomfo, nom_commune , count([Link]) from
[Link], [Link], [Link]
where [Link]=[Link]
and [Link]='5G'
GROUP BY [Link], nom_commune
order by 2 ASC, 3 DESC;
Tables : [Link], [Link], [Link]
Jointures : [Link]=[Link]
Sortie :
Q6 -
Select nom_commune , count([Link]) from
[Link], [Link], [Link]
where [Link]=[Link]
and [Link]='5G'
GROUP BY nom_commune
order by 1 ASC, 2 DESC
FETCH NEXT 10 ROWS ONLY;
Tables : [Link], [Link], [Link]
Jointures : [Link]=[Link]
Sortie :
Q7 -
Select nom_commune, nomfo, count([Link]) from
[Link], [Link], [Link], [Link]
where [Link]=[Link]
and distribution.code_insee=commune.code_insee
and [Link]=[Link]
and [Link]='5G'
GROUP BY nom_commune, nomfo
having count([Link])>50
order by 1 ASC, 3 DESC;
Tables : [Link], [Link], [Link], [Link]
Jointures : [Link]=[Link] ET
distribution.code_insee=commune.code_insee ET [Link]=[Link]
Sortie :
Q8 -
Select [Link], [Link], count([Link]) from
[Link], [Link], [Link], [Link]
where [Link]=[Link]
and [Link]='4G'
and distribution.code_insee=commune.code_insee
and [Link]=[Link]
GROUP BY [Link], [Link];
Tables : [Link], [Link], [Link], [Link]
Jointures : [Link]=[Link] ET
distribution.code_insee=commune.code_insee ET [Link]=[Link]
Sortie :
Ressource R2.06 TP2: Rappel
Exploitation d'une Base de Données
Q1)
Tables : [Link] et [Link]
Jointures : [Link] = [Link]
Sortie :
//1 in
select c.nom_commune
from commune c
where [Link] in (select [Link] from departement d where d.code_departement=49);
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.004s
Sortie :
Le type de transformation utilisé :
//1 exist
select c.nom_commune
from commune c
where exists (select * from departement d where [Link]= [Link] and
d.code_departement=49);
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.0011s
Conclusion sur le temps :
La seconde requête avec exists s'exécute généralement plus rapidement, car elle s'arrête dès
qu'une correspondance est trouvée, tandis que la première requête avec in doit récupérer et
comparer toutes les valeurs de la sous-requête.
Q2)
Tables : [Link] [Link] [Link], [Link]
Jointures : [Link] = [Link]
[Link] = [Link]
Sortie :
//2 in
select distinct nom_commune,nomdep
from commune c,operateur o
where generation='5G' and (c.code_insee,[Link]) in (select d.code_insee ,[Link] from
distribution d);
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.181s
Sortie :
//2 exists
select distinct nom_commune,nomdep
from commune c,operateur o
where generation='5G'and exists (select * from distribution d where c.code_insee=d.code_insee
and [Link]=[Link]);
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.052s
Conclusion sur le temps :
La seconde requête avec exists est plus rapide car elle évite de comparer tous les résultats de la
sous-requête et s'arrête dès qu'une correspondance est trouvée, tandis que la première requête
avec in doit récupérer et stocker tous les résultats avant de filtrer.
Q3)
Tables : [Link] [Link] [Link], [Link]
Jointures : [Link] = [Link]
[Link] = [Link]
sortie
//3 not in
select c.nom_commune, [Link]
from commune c
where c.code_insee not in (select d.code_insee from Operateur o,distribution d
where [Link]=[Link] and [Link] = '5G'
);
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.050s
//3 not exists
select c.nom_commune, [Link]
from commune c
where not exists (select * from Operateur o,distribution d
where c.code_insee=d.code_insee and [Link]=[Link] and [Link] = '5G');
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.036s
conclusion :
La seconde requête avec not exists est plus rapide car elle s'arrête dès qu'une correspondance est
trouvée, tandis que la première requête avec not in peut être moins efficace, surtout si la sous-
requête retourne des valeurs null, ce qui complique l'évaluation.
Q4)
Tables : [Link] [Link] [Link], [Link]
Jointures : [Link] = [Link]
[Link] = [Link]
Sortie :
//4 not in
select c.nom_commune, [Link]
from commune c,departement d
where c.code_insee not in
(select di.code_insee from Operateur o,distribution di where [Link]=[Link] and
[Link] = '5G' )and [Link]=[Link] and d.code_departement =44;
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.003s
//4 not exists
select c.nom_commune, [Link]
from commune c,departement d
where not exists (select * from Operateur o,distribution d
where c.code_insee=d.code_insee and [Link]=[Link] and [Link] = '5G')and
[Link]=[Link] and d.code_departement =44;
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.0026s
conclusion : Il n’y a pas un grand écart de temps entre les deux requetes.
Q5)
Tables : [Link] [Link]
Jointures : [Link] = [Link]
Sortie :
//5
select [Link],count(*) as nbr_commune
from commune c , Departement d
where [Link]=[Link]
group by ([Link]);
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.003s
//5 bis
select [Link],(select count(*)
from commune c where [Link]=[Link])
from Departement d;
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.006s
conclusion : Il n’y a pas un grand écart de temps encore une fois.
Q6)
Tables : [Link] [Link] [Link]
Jointures : commune.code_insee = distribution.code_insee
Sortie :
//6
select c.nom_commune ,count(*) as nbr_antennes
from operateur o,commune c ,distribution d
where [Link]=[Link] and c.code_insee=d.code_insee and nomdep='Loire-Atlantique' and
generation='5G'
group by (c.nom_commune)
order by count(*) ASC;
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.072s
Jointures : [Link] = [Link]
and distribution.code_insee = commune.code_insee
Sortie :
//6
select c.nom_commune ,(select count(*) from distribution d,operateur o
where [Link]=[Link] and c.code_insee=d.code_insee and generation='5G') as nbr_antennes
from commune c
where [Link]='Loire-Atlantique'
order by (nbr_antennes);
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.225s
conclusion :
La seconde requête est généralement plus rapide car elle évite le group by, qui peut être coûteux,
et utilise une sous-requête corrélée qui s'exécute pour chaque ligne de la table commune, ce qui
peut être plus efficace.
Q7)
Tables : [Link] [Link] [Link]
Jointures : commune.code_insee = distribution.code_insee
Sortie :
//7
select c.nom_commune ,count(*) as nbr_antennes
from operateur o,commune c ,distribution d
where [Link]=[Link] and c.code_insee=d.code_insee and nomdep='Loire-Atlantique' and
generation='5G'
group by (c.nom_commune)
Having count(*)>=10
order by count(*) ASC;
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.03s
Sortie :
//7
SELECT * FROM (SELECT c.nom_commune, (SELECT COUNT(*) FROM distribution
d ,operateur o where [Link] = [Link]
and c.code_insee = d.code_insee AND [Link] = '5G') AS nbr_antennes
FROM commune c
WHERE [Link] = 'Loire-Atlantique'
)
WHERE nbr_antennes >= 10
ORDER BY nbr_antennes;
Sortie :
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.228s
conclusion :
La première requête est plus rapide car elle utilise having count(*) >= 10 après le group by, ce qui
est optimiser.
Q8)
Tables : [Link] [Link] [Link]
Jointures : commune.code_insee = distribution.code_insee
Sortie :
//8
select c.nom_commune ,count(*) as nbr_antennes
from operateur o,commune c ,distribution d
where [Link]=[Link] and c.code_insee=d.code_insee and nomdep='Loire-Atlantique' and
(generation='5G' or generation='4G')
group by (c.nom_commune)
order by count(*) ASC;
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.008s
//8
select c.nom_commune ,(select count(*) from distribution d,operateur o
where [Link]=[Link] and c.code_insee=d.code_insee and ( generation='5G' or generation='4G'))
as nbr_antennes
from commune c
where [Link]='Loire-Atlantique'
order by (nbr_antennes);
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.008s
conclusion : Il n’y a pas un grand écart de temps
Q9 )
Tables : [Link] [Link]
Jointures : [Link] = [Link]
Sortie :
//9
select [Link],[Link],count(*)
from operateur o ,distribution d
where [Link]=[Link] and technologie in ('5G NR 3500', '5G NR 2100','5G NR 700')
group by [Link],[Link]
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.04s
Sortie :
//9 V2
select [Link],technologie,(select count(*) from distribution d where [Link]=[Link]) as
nombre_antennes
from operateur o
where technologie in ('5G NR 3500', '5G NR 2100','5G NR 700')
Sortie :
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.02s
conclusion : Il n’y a pas un grand écart de temps
Graphe :
Q10 -
Tables : [Link] [Link] [Link]
Jointures : [Link] = [Link] and distribution.code_insee =
commune.code_insee
Sortie :
Le type de transformation utilisé :
Select [Link], [Link], commune.nom_commune, count(*)
from [Link], [Link], [Link]
where [Link] = [Link]
and commune.nom_commune = 'Nantes'
and distribution.code_insee = commune.code_insee
and [Link] in ('5G NR 3500', '5G NR 2100', '5G NR 700')
GROUP BY [Link], [Link], commune.nom_commune;
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.066s
Sortie :
Le type de transformation utilisé :
Select [Link], [Link], commune.nom_commune,
( Select count(*) from [Link]
where [Link] = [Link]
and distribution.code_insee = commune.code_insee) as nbr_ant
from [Link], [Link]
where [Link] in ('5G NR 3500', '5G NR 2100', '5G NR 700')
and commune.nom_commune = 'Nantes';
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.026s
conclusion :
La seconde requête est la plus rapide, car elle évite le group by et utilise une sous-requête pour
compter les occurrences, ce qui est plus efficace dans ce cas précis.
Graphe :
//11
Tables : [Link] [Link] [Link]
Jointures : [Link] = [Link] and distribution.code_insee =
commune.code_insee
Sortie :
select [Link],[Link],count(*)
from operateur o ,distribution d,commune c
where [Link]=[Link] and c.code_insee=d.code_insee and technologie in ('5G NR 3500',
'5G NR 2100','5G NR 700') and nomdep = 'Loire-Atlantique'
group by [Link],[Link];
Sortie :
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.012s
//11 V2
select [Link], [Link],(select count(*)from distribution d where [Link] = [Link] and
exists
(select * from commune c where c.code_insee = d.code_insee and [Link] = 'Loire-
Atlantique')) as nombre_antennes
from operateur o
where [Link] in ('5G NR 3500', '5G NR 2100', '5G NR 700');
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.011s
conclusion :
La seconde requête est la plus rapide, car elle utilise exists, qui s'arrête dès qu'une
correspondance est trouvée, évitant ainsi le coût du group by et de la jointure explicite.
Graphe :
Q12)
Tables : [Link] [Link] [Link]
Jointures : [Link] = [Link] and distribution.code_insee =
commune.code_insee
Sortie :
//12 not exists
select c.nom_commune
from commune c
where not exists (select * from operateur o where not exists
(select * from distribution d where [Link] = [Link] and d.code_insee = c.code_insee));
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
1.651s
//12 not in
select c.nom_commune
from commune c
where c.code_insee not in (select c.code_insee from commune c ,operateur o where
(c.code_insee,[Link]) not in
(select c.code_insee,[Link] from distribution d
where [Link]=[Link] and c.code_insee=d.code_insee));
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
1.697s
conclusion :
La seconde requête est la plus rapide, car elle utilise des not exists imbriqués, qui permettent
d'éviter les comparaisons coûteuses avec not in et de s'arrêter dès qu'une correspondance est
trouvée.
Q13-
Tables : [Link] [Link] [Link]
Jointures : [Link] = [Link] and distribution.code_insee =
commune.code_insee
Sortie :
//13
select c.nom_commune
from commune c
where not exists (select * from operateur o where [Link]='5G' and not exists
(select * from distribution d where [Link] = [Link] and d.code_insee = c.code_insee ));
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0.976s
Q14-
Tables : [Link] [Link] [Link]
Jointures : [Link] = [Link] and distribution.code_insee =
commune.code_insee
Sortie :
//14
select c.nom_commune
from commune c
where not exists (select * from operateur o where [Link]='4G' and [Link]='ORANGE' and
not exists
(select * from distribution d where [Link] = [Link] and d.code_insee = c.code_insee ));
Le temps d’exécution des requétes. Indiquez dans ce cas la meilleur exécution:
0,442s