Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de...

28
Bases de Données (II) Requêtes D.Malka MPSI 2019-2020 D.Malka Bases de Données (II) MPSI 2019-2020 1 / 28

Transcript of Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de...

Page 1: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Bases de Données (II)Requêtes

D.Malka

MPSI 2019-2020

D.Malka Bases de Données (II) MPSI 2019-2020 1 / 28

Page 2: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Sommaire

Sommaire

1 Requête

2 Opérations sur le modèle relationnel

3 JointureProduit cartésienJointure (symétrique)

4 Fonctions agrégatAgrégatsConditions sur les agrégatsFonctions sur les agrégats

D.Malka Bases de Données (II) MPSI 2019-2020 2 / 28

Page 3: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Requête

Sommaire

1 Requête

2 Opérations sur le modèle relationnel

3 JointureProduit cartésienJointure (symétrique)

4 Fonctions agrégatAgrégatsConditions sur les agrégatsFonctions sur les agrégats

D.Malka Bases de Données (II) MPSI 2019-2020 3 / 28

Page 4: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Requête

Schéma de base de données

Une base de données est constituée d’un ensemble de table liées les unes aux autres.

Measurement

id INT(11)

value FLOAT

units VARCHAR(10)

start TIMESTAMP

end TIMESTAMP

associated_to VARCHAR(45)

location VARCHAR(20)

Observation_id INT(11)

Indexes

Measurement_Person

Person_ssn INT(11)

Measurement_id INT(11)

Indexes

Measurement_Sample

Sample_id INT(11)

Measurement_id INT(11)

Indexes

Measurement_Tool

Tool_id INT(11)

Measurement_id INT(11)

Indexes

Observation

id INT(11)

type VARCHAR(30)

acquisition_type ENUM(...)

start TIMESTAMP

end TIMESTAMP

associated_to TEXT

location VARCHAR(10)

Indexes

Observation_Person

Observation_id INT(11)

Person_ssn INT(11)

Indexes

Person

ssn INT(11)

lname VARCHAR(45)

fname VARCHAR(45)

dateOfBirth DATE

expertise VARCHAR(45)

manager INT(11)

Indexes

Sample

id INT(11)

size FLOAT

units CHAR(6)

timestamp TIMESTAMP

responsible INT(11)

Indexes

Tool

id INT(11)

name VARCHAR(45)

units CHAR(6)

error FLOAT

responsible INT(11)

Indexes

contact

tel VARCHAR(20)

email VARCHAR(30)

address TEXT

Person_ssn INT(11)

Indexes

D.Malka Bases de Données (II) MPSI 2019-2020 4 / 28

Page 5: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Requête

Requête

Une requête extrait ou construit de l’information à partir d’une base de donnée.Exemple :

Selecting all the measurements performed by ’Stephane LEBLOND’.� �1 SELECT p.lname,m.id,m.start,m.end2 FROM Person p JOIN Measurement_Person mp ON mp.Person_ssn=p.ssn3 JOIN Measurement m ON mp.Measurement_id=m.id4 WHERE lname=’LEBLOND’� �

D.Malka Bases de Données (II) MPSI 2019-2020 5 / 28

Page 6: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Requête

Requête

� �1 SELECT p.lname,m.id,m.start,m.end2 FROM Person p JOIN Measurement_Person mp ON mp.Person_ssn=p.ssn3 JOIN Measurement m ON mp.Measurement_id=m.id4 WHERE lname=’LEBLOND’� �Résultat :

lname id start endLEBLOND 1 "2019-02-23 08 :00 :00" "2019-02-23 08 :01 :00"LEBLOND 2 "2019-02-23 12 :00 :00" "2019-02-23 12 :01 :00"LEBLOND 5 "2019-02-24 08 :00 :00" "2019-02-24 08 :01 :00"LEBLOND 6 "2019-02-24 12 :00 :00" "2019-02-24 12 :01 :00"LEBLOND 9 "2019-02-25 08 :00 :00" "2019-02-25 08 :01 :00"LEBLOND 10 "2019-02-25 12 :00 :00" "2019-02-25 12 :01 :00"

Le résultat d’un requête est une table.

D.Malka Bases de Données (II) MPSI 2019-2020 6 / 28

Page 7: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Opérations sur le modèle relationnel

Sommaire

1 Requête

2 Opérations sur le modèle relationnel

3 JointureProduit cartésienJointure (symétrique)

4 Fonctions agrégatAgrégatsConditions sur les agrégatsFonctions sur les agrégats

D.Malka Bases de Données (II) MPSI 2019-2020 7 / 28

Page 8: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Opérations sur le modèle relationnel Opérateurs ensemblistes

Opérateurs ensemblistes

Opérateurs ensemblistesI Union : R1(S)∪R2(S)I Intersection : R1(S)∩R2(S)I Différence : R1(S)−R2(S)

En SQLI Union : (SELECT * FROM R1) UNION (SELECT * FROM R2)

I Intersection : (SELECT * FROM R1) INTERSECT (SELECT * FROM R2)

I Différence : (SELECT * FROM R1) EXCEPT (SELECT * FROM R2)

D.Malka Bases de Données (II) MPSI 2019-2020 8 / 28

Page 9: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Opérations sur le modèle relationnel Opérateurs ensemblistes

Opérateurs ensemblistes

Exemple de résultatLes relations bibliotheque 1 et bibliotheque 2 obéissent au même schémarelationnel :livre={numéro,auteur,titre}

Requête : (SELECT * FROM bibliotheque 1) EXCEPT (SELECT * FROMbibliotheque 2)

numéro auteur titre"78 BA" "Barbusse" "Le Feu"

"156 ES" "Eschyle" "Les Perses""007 CL" "Clausewitz" "De la Guerre"

. . . . . . . . ."126 OR" "Orwell" "1984"

La table renvoyée contient les livres disponibles uniquement dans la bibliothèque 1.

D.Malka Bases de Données (II) MPSI 2019-2020 9 / 28

Page 10: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Opérations sur le modèle relationnel Projection

Projection

ProjectionSoit R(S) une relation de S et X ⊂ S. On appelle projection de R selon X la relation :

πX (R) = {e(X )|e ∈ R}

Le schéma relationnel de πX (R) est donc X .

En SQLSELECT A1,A4,... FROM R

D.Malka Bases de Données (II) MPSI 2019-2020 10 / 28

Page 11: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Opérations sur le modèle relationnel Projection

Projection

Exemple de résultatRequête : SELECT nom, salaire FROM employe

nom salaire"Dinateur" 2565

"Cutier" 1500. . . . . .

"Bombeur" 5260

D.Malka Bases de Données (II) MPSI 2019-2020 11 / 28

Page 12: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Opérations sur le modèle relationnel Restriction (ou sélection)

Restriction

RestrictionSoit R(S) une relation de S, A ∈ S et a ∈ dom(A). On appelle restriction de R(S) selonA = a la relation :

σA=a(R) = {e ∈ R|e.A = a}

Le schéma relationnel de σA=a(R) est toujours S.

En SQLSELECT * FROM R WHERE A=a

D.Malka Bases de Données (II) MPSI 2019-2020 12 / 28

Page 13: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Opérations sur le modèle relationnel Restriction (ou sélection)

Restriction

Exemple de résultatRequête : SELECT * FROM employe WHERE salaire>2000

nss nom prénom salaire département1 75 . . . "Dinateur" "Laure" 2565 "Informatique"1 83 . . . "Citron" "Théo" 2050 "Marketing"

. . . . . . . . . . . . . . .2 94 . . . "Bombeur" "Jean" 5260 "Achat"

D.Malka Bases de Données (II) MPSI 2019-2020 13 / 28

Page 14: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Opérations sur le modèle relationnel Un exemple de requête simple

Une requête simple

Une requête simpleRenvoyer le nom et le département des employés touchant plus de 2000 euros.

πnom,departement (σsalaire>2000(employe))

En SQLSELECT nom, departement FROM employe WHERE salaire>2000

Exemple de résultat

nom département"Dinateur" "Informatique""Citron" "Marketing"

. . . . . ."Bombeur" "Achat"

D.Malka Bases de Données (II) MPSI 2019-2020 14 / 28

Page 15: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Jointure

Sommaire

1 Requête

2 Opérations sur le modèle relationnel

3 JointureProduit cartésienJointure (symétrique)

4 Fonctions agrégatAgrégatsConditions sur les agrégatsFonctions sur les agrégats

D.Malka Bases de Données (II) MPSI 2019-2020 15 / 28

Page 16: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Jointure Produit cartésien

Produit cartésien

Opération d’origine ensembliste.

Produit cartésienSoit R(S) et R′(S′) deux relations de schémas disjoints, leur produit cartésien est :

R×R′ = {(a1, . . . ,an,a′1, . . . ,a

′m)|(a1, . . . ,an) ∈ R et (a′1, . . . ,a

′m) ∈ R′}

Son schéma est :

S∪S′ = (A1, . . . ,An,A′1, . . . ,A

′m)

où S = (A1, . . . ,An) et S′ = (A′1, . . . ,A′m).

SQL multi-ensembliste : le résultat d’un produit cartésien peut contenir des doublons àmoins d’utiliser le mot clé DISTINCT dans la requête.

D.Malka Bases de Données (II) MPSI 2019-2020 16 / 28

Page 17: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Jointure Produit cartésien

Produit cartésien

Exemple de produit cartésienI Relation livre :

numero auteur titre

"78 BA" "Barbusse" "Le Feu""156 ES" "Eschyle" "Les Perses"

I Relation emprunt :

id_emprunt emprunteur num

12 Nono "78 BA"59 Roux "156 ES"

I Résultat du produit cartésien :

numero auteur titre num emprunteur

"78 BA" "Barbusse" "Le Feu" "78 BA" Nono"156 ES" "Eschyle" "Les Perses" "156 ES" Roux"78 BA" "Barbusse" "Le Feu" "156 ES" Roux"156 ES" "Eschyle" "Les Perses" "78 BA" Nono

On remarque que certains tuples n’ont pas de sens. Ainsi l’exemplaire 156 ES desPerses d’Eschyle a été emprunté par Roux et pas par Nono. Nécessité de la jointure.

D.Malka Bases de Données (II) MPSI 2019-2020 17 / 28

Page 18: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Jointure Produit cartésien

Produit cartésien

En SQLSELECT numero, auteur, titre, num, emprunteur # ProjectionFROM livre, emprunt # Produit cartésien

D.Malka Bases de Données (II) MPSI 2019-2020 18 / 28

Page 19: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Jointure Jointure (symétrique)

Jointure (symétrique)

Jointure (symétrique)Soient R(S) et R′(S′) deux relations de schémas disjoints, et A ∈ S, A′ ∈ S′ tels quedom(A) = dom(A′), on note :

R[A = A′]R′ = {e ∈ R×R′|e.A = e.A′} = σA=A′ (R×R′)

est appelé la jointure symétrique de S et S′ selon (A,A′).

I En théorie, les tuples de la table résultant de la jointure contient les attributsA et A′

I En pratique, on réalise le plus souvent une jointure entre une clé primaire etune clé étrangère : les attributs A et A′ sont alors redondants.

I Dans cas, on peut réaliser une projection pour éliminer cette redondance.

D.Malka Bases de Données (II) MPSI 2019-2020 19 / 28

Page 20: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Jointure Jointure (symétrique)

Jointure

Exemple de jointure symétriqueI Relation livre :

numero auteur titre

"78 BA" "Barbusse" "Le Feu""156 ES" "Eschyle" "Les Perses"

I Relation emprunt :

id_emprunt emprunteur num

12 Nono "78 BA"59 Roux "156 ES"

I Résultat de la jointure : livre[numero=num]emprunt

numero auteur titre num emprunteur

"78 BA" "Barbusse" "Le Feu" "78 BA" Nono"156 ES" "Eschyle" "Les Perses" "156 ES" Roux

Les tuples du produit cartésien qui n’avaient pas de sens ont disparu !D.Malka Bases de Données (II) MPSI 2019-2020 20 / 28

Page 21: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Jointure Jointure (symétrique)

Jointure

Littéralement, en SQLSELECT numero, auteur, titre, num, emprunteur # ProjectionFROM livre, emprunt # Produit cartésienWHERE num=numero AND . . . # Restriction

Mauvaise idée car alors la complexité mémoire et temporelle est O(n1×n2) avec n1 etn2 les tailles des deux tables.

D.Malka Bases de Données (II) MPSI 2019-2020 21 / 28

Page 22: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Jointure Jointure (symétrique)

Jointure

En SQL avec JOIN...ONSELECT numero, auteur, titre, num, emprunteur # ProjectionFROM livreJOIN emprunt ON num=numero # Jointure symétriqueWHERE . . . # Restriction

La complexité de la requête est alors O(n log(n)).

D.Malka Bases de Données (II) MPSI 2019-2020 22 / 28

Page 23: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Fonctions agrégat

Sommaire

1 Requête

2 Opérations sur le modèle relationnel

3 JointureProduit cartésienJointure (symétrique)

4 Fonctions agrégatAgrégatsConditions sur les agrégatsFonctions sur les agrégats

D.Malka Bases de Données (II) MPSI 2019-2020 23 / 28

Page 24: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Fonctions agrégat Agrégats

Fonctions sur les agrégats

Un exempleComment exprimer la requête suivante :

Renvoyer le salaire moyen des employés de chaque département de l’entreprisecomptant plus de 10 salariés.

La condition plus de 10 salariés ne pas porte sur un tuple mais sur des groupes detuples (des partitions). La restriction via le mot clé WHERE n’est donc pas adaptée àcette situation.

De même, le salaire moyen est calculé sur des groupes de tuples.

D.Malka Bases de Données (II) MPSI 2019-2020 24 / 28

Page 25: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Fonctions agrégat Agrégats

Agrégats

AgrégatsPartitions de la table renvoyée par une requête : GROUP BY.

N’a d’intérêt que si combiné avec une fonction d’agrégation.

EN SQLSELECT A1,. . .FROM R1,R2. . .WHERE . . .GROUP BY A1

D.Malka Bases de Données (II) MPSI 2019-2020 25 / 28

Page 26: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Fonctions agrégat Conditions sur les agrégats

Conditions sur les agrégats

Condition sur les AgrégatsCondition appliquée à chaque partition (et non pas l’ensemble des tuples) d’une table :HAVING

EN SQLSELECT A1,. . .FROM R1,R2. . .WHERE . . .GROUP BY A1HAVING <condition sur les partitions>

D.Malka Bases de Données (II) MPSI 2019-2020 26 / 28

Page 27: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Fonctions agrégat Fonctions sur les agrégats

Fonction sur les agrégats

Fonction sur les agrégatsFonctions appliquées à chaque partition (et non pas à l’ensemble des tuples) :

I MAXI MINI COUNT (nombre de tuples dans la partition)I AVG (moyenne des valeurs de l’attributs de la partition)I SUM (somme des valeurs de l’attributs de la partition)

D.Malka Bases de Données (II) MPSI 2019-2020 27 / 28

Page 28: Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de l’information à partir d’une base de donnée. Exemple : ... SELECT A1,A4,... FROM

Fonctions agrégat Fonctions sur les agrégats

Fonctions sur les agrégats

Utilisation des fonctions d’agrégationI employe(nss, nom, prénom, salaire, departement)

I departement(nom, localisation, responsable)

SELECT e.departement, AVG(salaire)FROM employe eGROUP BY departementHAVING COUNT(departement)>10

Cette requête renvoie une table du type :

d.nom AVG(salaire)"Achat" 3020"Marketing" 3250"Production" 1865

Les départements de moins de 10 employés ne figurent pas dans le résultat.

D.Malka Bases de Données (II) MPSI 2019-2020 28 / 28