BD Avance Chap3

December 1, 2022 | Author: Anonymous | Category: N/A
Share Embed Donate


Short Description

Download BD Avance Chap3...

Description

 

Requêtes d’interrogation SQL • Requêtes imbriquées • Agrégat • Regroupement

1

Motivation

 

• Les requêtes déjà vues ne correspondent correspondent qu’à des opérations simples • Vers le PL/SQL • Requête imbriquée 

Parfois la valeur d’un test doit être calculé comme le résultat d’une autre requête

• Agrégat 

Opération destinée à agréger agréger plusieurs valeurs valeurs de tuples en en une seule seule valeur (en les additionna additionnant, nt, en calculant leur moyenne, etc.)

• Regroupement 

Décomposition d’une table en plusieurs p lusieurs sous-tables sur lesquels des opérations seront effectuées effectuées sous-table par sous-table (des agrégats par

2

opérations seront effectuées effectuées sous table par sous table (des agrégats par

 

Requêtes imbriquées

3  

SQL : Requêtes

 

imbriquées

• Requête imbriquée dans la clause WHERE d'une requête externe::SELECT … externe Requête externe

FROM    …  WHERE

[Expression] [Expressio n] Opérateur  Opérateur (SELECT …  …  … FROM   WHERE …);

• Opéra Opérations tions ensemblistes

4



Le résultat d’une requête (imbriquée) est une table, c’est-à-dire un ensemble de tuples.



Les opérations possibles sont donc ensemblistes.

Requête imbriquée

Opérateurs ensemblistes

 

• IN  

appartenance ensemblis ensembliste te

  (A1,…An)

IN 

 

• EXISTS 

test d’existence



EXISTS

 



• COMPARAISON comparaison avec chaque élément d’un ensemble    (A1,…An)   ALL  



  opérateur de comparaison (,=,)

5

Expression IN

 

SELECT … FROM …  WHERE (A1,…,An)IN (A1,…,An)IN

  (SELECT B1,…,Bn FROM …  WHERE …); …);

• Sémantique : 

la condition est vraie si tuple désigné par (A  1,…,

A  n)de la requête externe

appartient au résultat de la requête interne interne..

• Algorithme 

Pour chaque tuple des tables de la requête externe, extraire et calculez calculez le sous-tuple (A1,…An)



Si le tuple obtenu appartient au résultat de la requête imbriquée, calculez les expressions de projection de la clause SELECT.

6

Expression NOT IN

 

SELECT … FROM …  WHERE (A1,…,An)  NOT  NOT

IN ( IN  (SELECT SELECT B1,…,Bn FROM …  WHERE …); …);

• Sémantique : 

la condition est vraie si tuple désigné par (A  1,…, A  n)de la requête externe n’appartient pas au résultat de la requête interne interne..

• Algorithme 

Pour chaque tuple des tables de la requête externe, externe, extraire et calculez calculez le sous-tuple (A1,…An)



Si le tuple obtenu n’appartient pas au résultat de la requête imbriquée, calculez les expressions de projection de la clause SELECT.

7

 

Exemple avec IN Emp (Eno, Ename, Title, City) Pay(Title, Salary)

des employés qui •  Noms travaillent dans des villes où il y a des projets de budget inférieur à 50? SELECT  Ename FROM  Emp  WHERE City   IN (SELECT   City

FROM   Project  WHERE Budget 50000)

12

EXISTS

 

SELECT … FROM R1 x…  WHERE EXISTS (  WHERE EXISTS  (SELECT SELECT B1,…,Bn FROM …  WHERE Condition(x) Condition(x) …);

Les deux requêtes sont généralement corrélées, la requête imbriquée dépend de la valeur de x.

• EXISTS retourne VRAI ou FAUX • Sémantique : 

La condition EXISTS est vraie si la requête imbriquée n’est pas vide.

• Algorithme 1.

Pour chaque tuple des tables de la requête externe, calculez le sous-tuple (A1,…An)

extraire et

2.

Si le résultat de la requête imbriquée n’est pas vide, alors calculez les expressions de projection de la clause SELECT.

13

Exemple avec EXISTS

 

Emp (Eno, Ename, Title, City) Pay(Title, Salary)

Project(Pno, Pname, Budget, City) Works(E (Eno, no, Pn Pno, o, Resp Resp,, Dur) Dur)

•  Noms des employés qui travaillent dans une ville où il y a au moins projet?    e.Ename SELECTun   FROM 

 WHERE

Emp e

EXISTS  (SELECT

*  Project  WHERE FROM   e.City=Project.City)

•  Noms des projets qui emploient des ‘Elect Eng’ ? Pname   SELECT p. Project p   FROM   WHERE EXISTS (SELECT *

 

FROM   Works w, Emp e  WHERE w.Pno=p.Pno and e.Eno=w.Eno e.Eno=w.Eno

and

14

Exemple avec EXISTS

 

Emp (Eno, Ename, Title, City) Pay(Title, SELECT   Salary) p.Pname FROM   WHERE

   

Project(Pno, Pname, Budget, City) Works(E (Eno, no, Pn Pno, o, Resp Resp,, Dur) Dur)

Project   p EXISTS  (SELECT * FROM Works  w, Emp e  WHERE e.Eno=w.Eno Ande.Title=’Elect.Eng.’)

La requête imbriquée ne dépend pas de p : elle retourne l’ensemble des employés de titre ‘Elect. Eng.’, indépendamment indépenda mment du projet sélectionné s électionné dans la requête externe. La clause EXISTS retourne donc toujours vraie (on suppose qu’il existe un tel employé) et la requête externe retourne tous les noms de projets.

15

 NOT EXISTS

 

SELECT … FROM R1 x…  WHERE NOT EXISTS (  WHERE NOT EXISTS (SELECT SELECT B1,…,Bn FROM …  WHERE Condition(x)); Condition(x) );

Les deux requêtes sont généralement corrélées, la requête imbriquée dépend de la valeur de x.

•  NOT EXISTS retourne VRAI ou FAUX FAUX • Sémantique : 

La condition NOT EXISTS est vraie si la requête imbriquée est vide.

• Algorithme 1.

Pour chaque tuple des tables de la requête externe, calculez le sous-tuple (A1,…An)

extraire et

2.

Si le résultat de la requête imbriquée est vide, alors calculez les expressions de projection de la clause SELECT.

16

 

Exemple avec NOT EXISTS

Emp (Eno, Ename, Title, City) Pay(Title, Salary)

Project(Pno, Pname, Budget, City) Works(E (Eno, no, Pn Pno, o, Resp Resp,, Dur) Dur)

•  Noms des projets qui n’emploient aucun ‘Elect Eng’ ?   SELECT p. Pname    Project FROM 

 WHERE

  p NOT

(SELECT   *

EXISTS

FROM   Works w, w, Emp e  WHERE w.Pno=p.Pno and e.Eno=w.Eno and e.Title=’Elect.Eng.’);

17

 

Agrégat

18

Fonctions d'agrégation

 

SELECT  FROM     WHERE



Une fonction d’agrégation permet de calculer une seule valeur numérique à partir des valeurs de plusieurs tuples pour un attribut donné 

• •

i), …, AggFunc(A  j) AggFunc(A  R1, ..., Rm conditions;

Exemple: la somme des budgets des projets

Une fonction d’agrégation prend un attribut en paramètre On utilise une fonction d’agrégation 

dans la clause SELECT pour effectuer un calcul post-pro post-projection jection



dans la clause WHERE pour remplacer une valeur par un calcul dans une condition. Ce calcul est le résultat de l’agrégation d’une requête imbriquée.

19

Fonctions d’agrégation

 

Fonction

Description

COUNT( COU NT([DI [DISTI STINCT NCT]x,y ]x,y,…) ,…) Décomp Décompte te des tup tuples les du rés résult ultat at par  projection sur le ou les attributs spécifiés (ou tous avec ‘*’).les L’option DISTINCT élimine doublons. MIN(x), MAX(x), AVG(x), SUM(x)

Calculent respectivement le minimum, le maximum, la moyenne et la somme des valeurs de l’attribut X.

20

 

Exéc écut utio ion n d’une d’une re requ quêt êtee Ex d’agrégation 1. La requê requête te est est exéc exécuté utéee classi classiquem quement ent et retou retourne rne une tab table le résultat temporaire dont les colonnes sont les attributs Ai, …, Aj utilisées dans les fonctions d’agrégation 2. Les fonc fonctio tions ns d’agr d’agréga égatio tion n sont sont appli appliqué quées es sur sur les les colon colonnes nes de la table résultat 3. Le ré résu sult ltat at de la req requê uête te est est un unee tab table le  dont les colonnes sont les noms des expressions de la clause SELECT 

contenant un seul tuple

21

Requête d’agrégation

 

Personnes

no m

pr éno m

s alair e

Martin

Pierre

2500

Dupond

J ea n

3000

D up ond

Marc

4200

Etape 1) Table-Temp = SELECT salaire FROM Personnes

SELECT sum(salaire) sum(salaire) FROM Personnes

Etape 2) Table-Resultat = SELECT sum(salaire) sum(salaire) FROM Table-Temp

salaire 2500 3000 4200

Sum(salaire ) agrégation

9700 TableResultat

Resultat

Table Tem

22

Exemples d'agrégation dans la clause SELECT

 

Emp (Eno, Ename, Title, City) City) Pay(Title, Salary)



Budget max des projets de Paris? SELECT  MAX(Budget)   Project FROM  City = ’Paris’;

 WHERE • Affichage du nombre d’employés SELECT COUNT(*) FROM  Emp;

Project(Pno, Pname, Budget, Works(Eno, Pno, Resp, Dur)

il y a un projet projet avec •  Nombre de villes où il l'employé E4? SELECT  COUNT(DISTINCT City)   FROM  Project, Works = Works.Pno  WHERE  Project.Pno Works.Eno = ’E4’;  AND

23

Exemple d'agrégation dans la clause WHERE

 

Emp (Eno, Ename, Title, City) City) Pay(Title, Salary)

Project(Pno, Pname, Budget, Works(Eno, Pno, Resp, Dur)

projets dont le budget budget est supérieur au budget budget •  Noms des projets moyen? SELECT   Pname FROM   

Projec t  WHERE   Budget > (SELECT   AVG(Budget)

FROM    Project);

24

 

Exemples d'agrégation Emp (Eno, Ename, Title, City) Pay(Title, Salary)

Project(Pno, Pname, Budget, City) Works(Eno, Pno, Resp, Dur)

• Budget max des projets de Paris avec SELECT   Pno, identifiant ?  MAX(Budget) FROM   Project  WHERE City = ’Paris’;

Impossible de mélanger une fonction d’agrégation avec un attribut sans agrégation s’il n’y a pas de clause GROUP BY !

• Budget max des projets de Paris avec identifiant ? SELECT   Pno, Pno, Budge Budget t FROM    Project  WHERE   City = ’Paris’ AND Bud Budget get = (SELECT

 

MAX(Budget)

FROM Project); 25

 

Regroupement

26

Re Requ quêt êtes es de de gr grou oupe peme ment nt :

 

SELECT  FROM     WHERE  GROUP

A  1,

), …, …, AggFunc(A  GROUP BY n+1

AggFunc(A  n+p)

A  n, R1, …, Rm …

BY A  1  …, A  n

• Sémantique 

Partitionne les tuples résultats en fonction des valeurs de certains attributs

• Algorithme 1.

Calcul de la requête brute (sans regroupement ni agrégation)

2.

Regroupement horizontal horizontal des lignes en sous-tables possédant les mêmes valeurs de regroupemen regroupementt A    …, A  j k

3.

Pour chaque sous-table, calcul des valeurs agrégées pour les attributs

non

27

GROUP BY

 

SELECT   A1, B1, sum(A2) FROM   R1,  R 2  WHERE A1 < 3 GROUP BY A1, B1 R1 A1 A2 2 6 1 2 3 1 3

1 8 3 2 3

A1 A2 A 2 B1 2 6 a 1 1 a

from

R  2 B 1

a

2 3 1 3

8 3 2 3

a a a a

A1 A2 A2 2 6 where 1 1 2 1

8 2

B1 a a a a

group by

A1 B1 A2* 1 a 1 2 2

a

6 8

selec t

A1 B1 sum(A2) 1 2

a a

3 14

28

GROUP BY

 

• Règles de regroupement 

Tous les attributs A  i, …, A  n  dans la clause SELECT qui ne sont pas impliqués dans la clause GROUP BY doivent être inclus dans une opération d'agrégat d 'agrégation ion •   SE SEL LECT

Pno, count(Eno)  FROM Works GROUP BY Pno;

• Sélection des tuples 

La clause WHERE permet de sélectionner les tuples appartenant aux soustables. La condition est évaluée AVANT le regroupement.

29

•   SE SEL LECT

Pno, count Eno FROM Works

Exem ples es de gr grou oupe peme ment nt Exempl

 

Emp (Eno, Ename, Title, City) Pay(Title, Salary)

Project(Pno, Pname, Budget, City) Works(Eno, Pno, Resp, Dur)

•  Numéros des projets avec le nombre d’employés impliqués par projet ? SELECT  Pno, FROM    GROUP

Count(Eno)

Works

BY   Pno;

•  Noms des villes avec la durée moyenne moyenne et la durée maximale de  participation d’un employé par ville et par projet ? SELECT  City,  Pname, AVG(Dur), MAX(Dur)    Works,   Project  FROM 

 WHERE Works.Pno=Project.Pno GROUP BY   City, Pname;

30

 

Exemple de groupement ordonné

Classement des produits par la valeur totale vendue pour  produits les SELECT   DISTINCT produit.nom, SUM(vente.qt * AS total FROM   produit, vente  WHERE  produit.id = GROUP  vente.produit_idx  BY ORDER produit.nom BY total;

Le tri des résultats se fait  APRES le regroupement et l’agrégation.

produit.prix)

31  

Séle ctio ion n su surr de dess Sélect

 

SELECT  FROM     WHERE GROUP HAVING

A  i, …, A  n, [AggFunc(A  i), …, AggFunc(A  j), …]

groupes …

R1, …, Rm

BY A  j  …, A  k  

condition

• Sémantique 

Sélectionne les groupes (partitions) qui satisfont une certaine condition .

• Algorithme 1.

Sélectionne tous les tuples qui satisfont les conditions de la clause WHERE.

2.

Forme les groupes qui partagent les mêmes valeurs de la clause GROUP BY.

3.

Supprime tous les groupes qui ne satisfont pas les conditions de la clause HAVING

4.

Applique les fonctions d’agrégation pour chaque groupe.

Retourne les valeurs des colonnes et des agrégation de la clause SELECT.

5. 32

Séle ctio ion n su surr de dess Sélect

 

groupes

• Règle : La condition de la clause HAVING porte 



Soit sur des valeurs atomique atomiquess retournées par un opérateur d'agrégation d'agrégation sur  les attributs qui n’apparaissent pas dans le GROUP BY Soit sur des opérations d’agrégation sur des attributs qui apparaissent dans le GROUP BY

• Exemple SELECT DISTINCT produit.nom, SUM(vente.qt*produit.prix) AS FROM   

total pro produi duit, t,

 WHERE  pro produi duit.i t.id d

vente ven te

= ven vente. te.pro produi duit_i t_idx dx

GROUP BY  produit.nom HAVING nom like ’a%’ AND MIN(vente.qt)>1;

HAVING nom like

a%

AND MIN(vente.qt) 1;

33

 

Exemples de groupement avec sélection Emp (Eno, Ename, Title, City) Pay(Title, Salary)

Project(Pno, Pname, Budget, City) Works(Eno, Pno, Resp, Dur)

• Villes dans lesquelles habitent plus de 2 employés? SELECT  City    Emp  FROM  GROUP

BY

City   HAVING COUNT(ENO)

> 2;

• Projets dans 34

 

Exemples de groupement avec sélection Afficher Les modèles de voitures qui proposent un choix de plus de 10 couleurs.

 Voiture ( id_voitur id_voiture, e, model, couleur, couleur,…) …) SELECT  DISTINCT model FROM   voiture GROUP BY model HAVING  COUNT(couleur) > 10; Classement des produits par la valeur totale vendue pour les produits commençant par la lettre ‘M’. Produit( Produi t( id, id , nom, prix,…)

vente( id_vente, produit_idx  produit_idx*, qt, prix,…) SELECT  DISTINCT produit.nom, SUM(vente.qt * produit.prix) AS total FROM   produit, vente vente WHERE   produit.id=vente.produit_idx GROUP BY produit.nom HAVING  produit.nom like ’M%’

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF