Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de...
Transcript of Bases de Données (II) - Requêtes - David Malka MPSI...Une requête extrait ou construit de...
Bases de Données (II)Requêtes
D.Malka
MPSI 2019-2020
D.Malka Bases de Données (II) MPSI 2019-2020 1 / 28
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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