Rappel sur les Bases de Données SQL
Rappel sur les Bases de Données SQL
sur les
Bases de Données
Didier DONSEZ
Université de Valenciennes
Institut des Sciences et Techniques de Valenciennes
donsez@[Link]
n Manipulation
• Opérateurs Relationnels Ordres
∪ , -, ∏ , σ, ×, ∩ , ÷ , SELECT …
• Composition d ’Opérateurs FROM …
associativité des jointures, … WHERE ...
04/10/00 2
Exemples de Requêtes
n Multi-Relations
• Noms des buveurs de vins
Didier Donsez, 1998-2000, Rappel Bases de Données
Buv NB Nom
100 Al
101 Ben NB Nom NB Qte
102 Charlie 100 Al 100 50
103 David 100 Al 100 25
Didier Donsez, 1998-2000, Rappel Bases de Données
100 Al 100 75
Conso NB Qte 101 Ben 101 100
100 50 101 Ben 101 50
100 25 102 Charlie 102 25
100 75
101 100
101 50
102 25
04/10/00 7
Propriétés de l ’algèbre relationnelle
/[Link]=[Link])
/Nom)
∏ ( ><( Buveurs
><(σ( Vins/Couleur=‘Rouge ’),Conso/ [Link]=[Link])
/[Link]=[Link])
/Nom)
04/10/00 8
Propriétés de l ’algèbre relationnelle
∏ ( σ( ><( Buveurs
Didier Donsez, 1998-2000, Rappel Bases de Données
><(Vins,Conso/ [Link]=[Link])
/[Link]=[Link])
/Couleur=‘Rouge ’)
/Nom)
04/10/00 9
Représentation
en Arbre Algébrique
Utile à l ’optimiser pour déterminer un plan d ’exécution de la requête optimal
R R
Partition
+Agrégat ∑ (Qte) ∑ (Qte)
NB,Nom,Qte NB,Nom,Qte
Didier Donsez, 1998-2000, Rappel Bases de Données
NV=NV NB=NB
NB=NB NV=NV
REGION CHAR(10),
COULEUR CHAR(10)
PRIMARY KEY(NV) -- clé primaire
);
CREATE TABLE CONSO( NB DECIMAL(5),
NV CHAR(5),
QTE DECIMAL(5)
PRIMARY KEY(NB,NV), -- clé primaire
FOREIGN KEY (NB) REFERENCES BUVEURS, -- clé étrangère
FOREIGN KEY (NV) REFERENCES VINS, -- clé étrangère
);
04/10/00 12
Requêtes : ordre SELECT
SELECT Colonnes à “Projeter”
FROM Tables Sources
WHERE Conditions sur les Lignes
GROUP BY Colonnes de Groupage
HAVING Condition sur les groupes
ORDER BY Colonnes du tri
Didier Donsez, 1998-2000, Rappel Bases de Données
n Requêtes Mono-Tables
• 1 seule table source
n Requêtes Multi-Tables
• N tables sources
• Condition testée sur chaque ligne
issu de leur produit cartesien
04/10/00 13
Exemples de Requêtes
n Mono-Table
• Noms des buveurs parisiens
• Crus des bordeaux rouges de millésime 1994
n Multi-Tables
Didier Donsez, 1998-2000, Rappel Bases de Données
04/10/00 14
Exemple de Jointure
SELECT * FROM Buveurs JOIN Conso
ON ([Link]=[Link])
Buv NB Nom
100 Al
101 Ben NB Nom NB Qte
102 Charlie 100 Al 100 50
103 David 100 Al 100 25
Didier Donsez, 1998-2000, Rappel Bases de Données
100 Al 100 75
Conso NB Qte 101 Ben 101 100
100 50 101 Ben 101 50
100 25 102 Charlie 102 25
100 75
101 100
101 50
102 25
04/10/00 15
Réponses avec X et JOIN
SELECT [Link]
FROM BUVEURS, CONSO, VINS
WHERE [Link]=’Paris ’AND [Link]=’Rouge’
AND [Link] = [Link] AND [Link] = [Link];
n Et …
SELECT [Link]
FROM (BUVEURS JOIN CONSO ON [Link] = [Link])
Didier Donsez, 1998-2000, Rappel Bases de Données
);
SELECT [Link]
FROM BUVEURS
WHERE [Link]=’Paris’
AND EXISTS( SELECT *
FROM CONSO
WHERE [Link] = [Link]
AND EXISTS( SELECT *
FROM VINS
WHERE [Link]=[Link]
AND [Link]=’Rouge’ )
17
04/10/00
);
Réponses avec
NOT IN et NOT EXISTS
Noms des buveurs qui ne boivent pas de vins
SELECT [Link]
FROM BUVEURS
WHERE [Link] NOT IN ( SELECT [Link]
FROM CONSO
);
Didier Donsez, 1998-2000, Rappel Bases de Données
SELECT [Link]
FROM BUVEURS
WHERE NOT EXISTS( SELECT *
FROM CONSO
WHERE [Link] = [Link]
);
04/10/00 18
Agrégats et Groupage (i)
n Fonctions d ’agrégat
• SUM, AVG (Moyenne), MIN, MAX, COUNT
n Agrégat Simple
Didier Donsez, 1998-2000, Rappel Bases de Données
Buv NB Nom
100 Al
101 Ben NB Nom NB Qte
102 Charlie 100 Al 100 50
100 Al 100 25 Nom Qte
Al 150
Didier Donsez, 1998-2000, Rappel Bases de Données
100 Al 100 75
Conso NB Qte 101 Ben Ben 150
101 100
100 50 101 Ben Charlie 25
101 50
100 25 102 Charlie 102 25
100 75
101 100 54,166 108,33
101 50 Moyenne des quantités de vin
102 25 consommées
04/10/00 Moyenne de la quantité totale de vins consommée par chaque buveur
20
Agrégats et Groupage (Réponses)
n Remarque
• les buveurs n ’ayant pas bu n ’apparaissent pas
Didier Donsez, 1998-2000, Rappel Bases de Données
04/10/00 22
La Jointure externe (ii)
n Définition
• Jointure
• Les lignes qui ne satisfont jamais la condition de jointure,
sont complétés (padded) avec des nulls. Le "padding" peut
être complet (FULL), à droite (RIGHT) ou à gauche (LEFT)
Didier Donsez, 1998-2000, Rappel Bases de Données
n La réponse
SELECT [Link], [Link], SUM(NVL([Link],0))
FROM BUVEURS LEFT OUTER JOIN CONSO
ON [Link] = [Link]
GROUP BY [Link], [Link];
04/10/00 23
La Jointure externe (iii)
LEFT OUTER JOIN
Buv NB Nom
100 Al
101 Ben NB Nom NB Qte
102 Charlie 100 Al 100 50
100 Al 100 25 Nom Qte
103 David Al 150
Didier Donsez, 1998-2000, Rappel Bases de Données
100 Al 100 75
Conso NB Qte 101 Ben Ben 150
101 100
100 50 101 Ben Charlie 25
101 50
100 25 David 0
102 Charlie 102 25
100 75 103 David Null Null
101 100
101 50
102 25
04/10/00 24
La Jointure externe (iv)
FULL OUTER JOIN
Buv NB Nom
100 Al
101 Ben NB Nom NB Qte
102 Charlie 100 Al 100 50
103 David 100 Al 100 25
Didier Donsez, 1998-2000, Rappel Bases de Données
100 Al 100 75
Conso NB Qte 101 Ben 101 100
100 50 101 Ben 101 50
100 25 102 Charlie 102 25
100 75 103 David Null Null
101 100 Null Null 104 125
101 50
102 25
04/10/00
104 125 25
La Jointure externe (v)
n Syntaxe Oracle
SELECT [Link], [Link], SUM(NVL([Link],0))
FROM BUVEURS, CONSO
WHERE [Link] (+) = [Link]
GROUP BY [Link], [Link];
n Syntaxe SQLBase, DB2
SELECT [Link], [Link], SUM(NVL([Link],0))
Didier Donsez, 1998-2000, Rappel Bases de Données
n On veut ce tableau
name1 name2 name3 name4
=================================
Didier Donsez, 1998-2000, Rappel Bases de Données
04/10/00 27
Elément de réponse
[Link]
GROUP BY [Link]
HAVING MOD(COUNT([Link]), 2) = (SELECT MOD(COUNT(*),2) FROM Names)
)
GROUP BY [Link]
ORDER BY [Link];
04/10/00 28
La réponse
SELECT [Link], LEFT OUTER JOIN
MIN([Link]) AS name2, Names AS N5
MIN([Link]) AS name3, ON [Link] < [Link]
MIN([Link]) AS name4, AND [Link] < [Link]
MIN([Link]) AS name5 AND [Link] < [Link]
FROM (Names AS N1 AND [Link] < [Link]
LEFT OUTER JOIN WHERE [Link] IN (SELECT [Link]
Didier Donsez, 1998-2000, Rappel Bases de Données
COUNT(Qte)
n La réponse
SELECT [Link], [Link], [Link],
(SELECT COUNT(DISTINCT Qte) FROM Conso AS C1
WHERE ([Link] >=[Link]) AND ([Link]=[Link]))
AS RANG
Didier Donsez, 1998-2000, Rappel Bases de Données
FROM Conso AS C0
WHERE RANG<= :n; -- n est ajustable (5 pour un Top5)
04/10/00 31
Les Vues (Views)
n Schéma Externe
• définit à partir du schéma conceptuel ou d ’une autre vue
n Exemple
• Vue sur les vins rouges
• Vue sur les gros buveurs (quantité totale > 100)
Didier Donsez, 1998-2000, Rappel Bases de Données
n Insertion
• “ Inserer un nouveau tuple décrivant un Riesling de 1997 ”
INSERT INTO VINS (NV, CRU, MILL, COULEUR)
VALUES (‘RIES1’, ‘Riesling’, 1997, ‘Blanc’)
n Modification de tuples
Didier Donsez, 1998-2000, Rappel Bases de Données
n Suppression de tuples
• “ Supprimer les consommations des buveurs habitant Paris”
DELETE FROM CONSO
WHERE NB IN (SELECT NB FROM BUVEURS WHERE VILLE = ‘Paris’)
04/10/00 33
Les limites de SQL
n Récursion
• relation composant/composé, graphe, arbre, …
• Réponse : SQL3
n Orientation-Objet
• Abstraction, Spécialisation, Généralisation
• Réponse : SQL3 et le modèle Objet-Relationnel
04/10/00 34
Conception de Bases de Données
• 2 approches complémentaires
n Théorie de la Normalisation
• Déterminer les attributs et leurs dépendances
• Décomposer la relation universel en 3ème forme normale
• suppression des redondances
Didier Donsez, 1998-2000, Rappel Bases de Données
04/10/00
• Transformation vers le modèle relationnel 35
Bibliographie