0% ont trouvé ce document utile (0 vote)
36 vues28 pages

Ressource R2.06 TP1: Rappel Exploitation D'une Base de Données

Le document présente une série de requêtes SQL pour exploiter une base de données contenant des informations sur les communes, les opérateurs et les distributions. Chaque requête est accompagnée d'une description des tables, des jointures utilisées et des temps d'exécution, avec des comparaisons entre différentes méthodes de requêtes. Les conclusions soulignent l'importance de la structure des requêtes pour optimiser les performances d'exécution.

Transféré par

pluniels
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats ODT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
36 vues28 pages

Ressource R2.06 TP1: Rappel Exploitation D'une Base de Données

Le document présente une série de requêtes SQL pour exploiter une base de données contenant des informations sur les communes, les opérateurs et les distributions. Chaque requête est accompagnée d'une description des tables, des jointures utilisées et des temps d'exécution, avec des comparaisons entre différentes méthodes de requêtes. Les conclusions soulignent l'importance de la structure des requêtes pour optimiser les performances d'exécution.

Transféré par

pluniels
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats ODT, PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi