Você está na página 1de 36

http://membres-liglab.imag.

fr/donsez/cours

Rappel sur les


Bases de Donnes

Didier DONSEZ
Universit Joseph Fourier
PolyTechGrenoble LIG/ADELE
Didier.Donsez@imag.fr,
Didier.Donsez@ieee.org
18/09/2008

Didier Donsez, 1998-2007, Rappel


Bases de Donnes

18/09/2008

Concepts de Base


Didier Donsez, 1998-2007, Rappel Bases de Donnes

Modle Relationnel

SQL

Concept de Base


Relation

Table

Tuple

Ligne

Attribut

Colonne

Manipulation


Oprateurs Relationnels

, -, , , , , ,


Composition d Oprateurs

Ordres
SELECT
FROM

associativit des jointures, WHERE ...


2

18/09/2008

Exemples de Requtes


Soit la base constitue par les relations

Didier Donsez, 1998-2007, Rappel Bases de Donnes

BUVEURS(NB, NOM, VILLE)


VINS(NV, CRU, MILL, REGION, COULEUR)
CONSO(NB, NV, QTE)


Mono-Relation


Noms des buveurs parisiens

( ( Buveurs/ Ville= Paris )/ Nom)




Crus des bordeaux rouges de millsime 1994


(
( Vins/ Region= Bordelais Mill=1994
Couleur= Rouge )
/ Cru)

18/09/2008

La Restriction et la Projection

Didier Donsez, 1998-2007, Rappel Bases de Donnes

Buv

NB
100
101
102
103

Nom
Ben
Ben
Charlie
David

( Buveurs/ Ville= Paris )


Rest

NB
102
103

Nom
Charlie
David

Ville
Paris
Paris

Ville
Nice
Lille
Paris
Paris

(Buveurs/Ville)
Proj

Ville
Nice
Lille
Paris
4

18/09/2008

Exemples de Requtes


Soit la base constitue par les relations


BUVEURS(NB, NOM, VILLE)
VINS(NV, CRU, MILL, REGION, COULEUR)
CONSO(NB, NV, QTE)

Multi-Relations

Didier Donsez, 1998-2007, Rappel Bases de Donnes

Noms des buveurs de vins


( ( (Buveur x Conso)/ Buveurs.NB=Conso.NB)/ Nom)
( ><( Buveur,Conso/ Buveurs.NB=Conso.NB)/ Nom)

Noms des buveurs qui ont consomm un vin rouge


(

><(( Vins/Couleur= Rouge ),


><( Buveur,Conso/ Buveurs.NB=Conso.NB)
/Conso.NV=Vins.NV)

/Nom)
5

18/09/2008

L union et l intersection

Didier Donsez, 1998-2007, Rappel Bases de Donnes

Buv1

NB
100
101

Nom
Ben
Ben

Ville
Nice
Lille

Buveurs1 Buveurs2
Union

NB
100
101
102
103

Nom
Ben
Ben
Charlie
David

Ville
Nice
Lille
Paris
Paris

Buv2

NB
101
102
103

Nom
Ben
Charlie
David

Ville
Lille
Paris
Paris

Buveurs1 Buveurs2
Inter

NB
101

Nom
Ben

Ville
Lille

18/09/2008

La Jointure ><

Didier Donsez, 1998-2007, Rappel Bases de Donnes

Buv

NB
100
101
102
103

Conso NB
100
100
100
101
101
102

Nom
Al
Ben
Charlie
David
Qte
50
25
75
100
50
25

NB
100
100
100
101
101
102

Nom
Al
Al
Al
Ben
Ben
Charlie

NB
100
100
100
101
101
102

Qte
50
25
75
100
50
25

18/09/2008

Proprits de l algbre relationnelle




Associativit des jointures




Noms des buveurs qui ont consomm un vin rouge


><(

( Vins/Couleur= Rouge ),

><( Buveur,Conso/ Buveurs.NB=Conso.NB)


Didier Donsez, 1998-2007, Rappel Bases de Donnes

/Conso.NV=Vins.NV)
/Nom)
( ><( Buveurs
><(( Vins/Couleur= Rouge ),Conso/ Vins.NV=Conso.NV)
/Conso.NB=Buveurs.NB)
/Nom)
8

18/09/2008

Proprits de l algbre relationnelle




Commutativit des jointures et des restrictions




Noms des buveurs qui ont consomm un vin rouge

( ( ><(

Buveurs

Didier Donsez, 1998-2007, Rappel Bases de Donnes

><(Vins,Conso/ Vins.NV=Conso.NV)
/Conso.NB=Buveurs.NB)
/Couleur= Rouge )
/Nom)

18/09/2008

Reprsentation
en Arbre Algbrique

Utile l optimiser pour dterminer un plan d excution de la requte optimal

Didier Donsez, 1998-2007, Rappel Bases de Donnes

Partition
+Agrgat

(Qte)

(Qte)

NB,Nom,Qte

NB,Nom,Qte

NV=NV

NB=NB

NB=NB
Mill=1994
Vins

Conso

NV=NV

Ville=Paris

Mill=1994

Buveurs

Vins

Ville=Paris
Conso

Buveurs
10

18/09/2008

La Notion de Cl


Cl d un relation


Cls candidates (Candidate Keys)




Didier Donsez, 1998-2007, Rappel Bases de Donnes

Groupe minimum d attributs dont la connaissance de la valeur


permet de connatre celle des autres attributs
identifie un tuple parmi les autres
plusieurs cls possibles pour la mme relation


Cl primaire (Primary Key)




CodePostal(Ville,Rue,CodPost) -> (Ville,Rue) ou (CodPost)

une cl choisie parmi les cls candidates (CodPost)

Cls trangres (Foreign Keys)







cl primaire C d une relation A


apparaissant parmi les attributs d une relation B
on dit : C de B rfrence A
dfinit une contrainte d intgrit rfrentielle
11

18/09/2008

Cration des Tables en SQL


CREATE TABLE BUVEURS(

Didier Donsez, 1998-2007, Rappel Bases de Donnes

);
CREATE TABLE VINS(

);
CREATE TABLE CONSO(

NB
DECIMAL(5),
NOM
CHAR(20),
VILLE
CHAR(15),
PRIMARY KEY(NB)

-- cl primaire

NV
CHAR(5),
CRU
CHAR(20),
MILL
INTEGER,
REGION CHAR(10),
COULEUR CHAR(10)
PRIMARY KEY(NV)

-- cl primaire

NB
DECIMAL(5),
NV
CHAR(5),
QTE
DECIMAL(5)
PRIMARY KEY(NB,NV),
-- cl primaire
FOREIGN KEY (NB) REFERENCES BUVEURS, -- cl trangre
FOREIGN KEY (NV) REFERENCES VINS,
-- cl trangre

);
12

18/09/2008

Requtes : ordre SELECT

Didier Donsez, 1998-2007, Rappel Bases de Donnes

SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY

Requtes Mono-Tables


Colonnes Projeter
Tables Sources
Conditions sur les Lignes
Colonnes de Groupage
Condition sur les groupes
Colonnes du tri

1 seule table source

Requtes Multi-Tables



N tables sources
Condition teste sur chaque ligne
issu de leur produit cartesien
13

18/09/2008

Exemples de Requtes


Didier Donsez, 1998-2007, Rappel Bases de Donnes

Mono-Table


Noms des buveurs parisiens

Crus des bordeaux rouges de millsime 1994

Multi-Tables



Noms des buveurs de vins


Noms des buveurs parisiens qui ont consomm un vin
rouge


Exprimez les jointures de 4 manires diffrentes

Noms des buveurs qui ne boivent pas de vins

14

18/09/2008

Didier Donsez, 1998-2007, Rappel Bases de Donnes

Buv

SELECT * FROM Buveurs JOIN Conso


ON
(Buveurs.NB=Conso.NB)
NB
100
101
102
103

Conso NB
100
100
100
101
101
102

Nom
Al
Ben
Charlie
David
Qte
50
25
75
100
50
25

NB
100
100
100
101
101
102

Nom
Al
Al
Al
Ben
Ben
Charlie

NB
100
100
100
101
101
102

Qte
50
25
75
100
50
25

15

18/09/2008

Rponses avec X et JOIN


SELECT
FROM
WHERE
AND

Didier Donsez, 1998-2007, Rappel Bases de Donnes

BUVEURS.NOM
BUVEURS, CONSO, VINS
BUVEURS.VILLE=Paris AND VINS.COULEUR=Rouge
BUVEURS.NB = CONSO.NB AND CONSO.NV = VINS.NV;

Et

SELECT BUVEURS.NOM
FROM (BUVEURS JOIN CONSO ON BUVEURS.NB = CONSO.NB)
JOIN VINS ON CONSO.NV = VINS.NV
WHERE BUVEURS.VILLE=Paris AND VINS.COULEUR=Rouge;


Et

SELECT BUVEURS.NOM
FROM (BUVEURS JOIN CONSO USING(NB)) JOIN VINS USING(NV)
WHERE BUVEURS.VILLE=Paris AND VINS.COULEUR=Rouge;


Et
16

18/09/2008

Rponses avec IN et EXISTS

Didier Donsez, 1998-2007, Rappel Bases de Donnes

SELECT
FROM
WHERE
AND

BUVEURS.NOM
BUVEURS
BUVEURS.VILLE=Paris
BUVEURS.NB IN (
SELECT
FROM
WHERE

CONSO.NB
CONSO
CONSO.NV IN (
SELECT
FROM
WHERE

VINS.NV
VINS
VINS.COULEUR=Rouge )

);
SELECT
FROM
WHERE
AND

BUVEURS.NOM
BUVEURS
BUVEURS.VILLE=Paris
EXISTS( SELECT *
FROM
CONSO
WHERE CONSO.NB = BUVEURS.NB
AND
EXISTS( SELECT *
FROM
VINS
WHERE VINS.NV=CONSO.NV
AND
VINS.COULEUR=Rouge
);

)
17

Rponses avec
NOT IN et NOT EXISTS

18/09/2008

Noms des buveurs qui ne boivent pas de vins


SELECT
FROM
WHERE

BUVEURS.NOM
BUVEURS
BUVEURS.NB NOT IN (

SELECT
FROM

CONSO.NB
CONSO

Didier Donsez, 1998-2007, Rappel Bases de Donnes

);

SELECT
FROM
WHERE

BUVEURS.NOM
BUVEURS
NOT EXISTS(

SELECT *
FROM CONSO
WHERE CONSO.NB = BUVEURS.NB

);

18

18/09/2008

Agrgats et Groupage (i)




Fonctions d agrgat


Didier Donsez, 1998-2007, Rappel Bases de Donnes

Agrgat Simple


Moyenne des consommations de vins rouges

Agrgat Group (clause GROUP BY)





SUM, AVG (Moyenne), MIN, MAX, COUNT

Moyenne des consommations par couleur de vin


Quantit totale de vins consomme par chaque buveur

Condition sur les Groupes (clause HAVING)




Nom des buveurs qui consomment plus que la moyenne


19

18/09/2008

Agrgats et Groupage (ii)


Quantit totale de vins consomme par chaque buveur ?

Didier Donsez, 1998-2007, Rappel Bases de Donnes

Buv

NB
100
101
102

Conso NB
100
100
100
101
101
102

Nom
Al
Ben
Charlie
Qte
50
25
75
100
50
25

NB
100
100
100
101
101
102

Nom
Al
Al
Al
Ben
Ben
Charlie

NB
100
100
100
101
101
102

Qte
50
25
75
100
50
25
54,166

Nom
Al
Ben
Charlie

Qte
150
150
25

108,33

Moyenne des quantits de vin


consommes

20
Moyenne de la quantit totale de vins consomme par chaque buveur

18/09/2008

Agrgats et Groupage (Rponses)




Moyenne des consommations de vins rouges

SELECT AVG(QTE) FROM CONSO, VINS


WHERE VINS.COULEUR=Rouge AND CONSO.NV = VINS.NV;


Moyenne des consommations par couleur de vin

Didier Donsez, 1998-2007, Rappel Bases de Donnes

SELECT COULEUR, AVG(QTE) FROM CONSO, VINS


WHERE CONSO.NV = VINS.NV GROUP BY COULEUR;


Quantit totale de vins consomme par chaque buveur

SELECT NB, SUM(QTE) AS QTOT FROM CONSO GROUP BY NB;




Nom des buveurs qui consomment plus que la moyenne

SELECT NOM FROM BUVEUR


WHERE NB IN (
SELECT NB FROM CONSO GROUP BY NB
HAVING SUM(QTE) >
(SELECT AVG(QTOT) FROM
(SELECT NB, SUM(QTE) AS QTOT FROM CONSO GROUP BY NB)));
21

18/09/2008

La Jointure externe (i)




Liste des Buveurs avec leur consommation

SELECT BUVEURS.NOM, SUM(CONSO.QTE)


FROM BUVEUR JOIN CONSO ON BUVEURS.NB = CONSO.NB;


Remarque

Didier Donsez, 1998-2007, Rappel Bases de Donnes

les buveurs n ayant pas bu n apparaissent pas

Solution (avec des INNER JOIN)


(SELECT
FROM
UNION
(SELECT
FROM
WHERE

BUVEURS.NOM, SUM(CONSO.QTE)
BUVEUR JOIN CONSO ON BUVEURS.NB = CONSO.NB)
NOM, 0
BUVEURS
NB NOT IN (SELECT NB FROM CONSO));

22

18/09/2008

La Jointure externe (ii)




Dfinition


Didier Donsez, 1998-2007, Rappel Bases de Donnes

Jointure
Les lignes qui ne satisfont jamais la condition de
jointure, sont complts (padded) avec des nulls. Le
"padding" peut tre complet (FULL), droite (RIGHT) ou
gauche (LEFT)

La rponse
SELECT
FROM
GROUP BY

BUVEURS.NOM, BUVEURS.NB, SUM(NVL(CONSO.QTE,0))


BUVEURS LEFT OUTER JOIN CONSO
ON BUVEURS.NB = CONSO.NB
BUVEURS.NOM, BUVEURS.NB;

23

18/09/2008

Didier Donsez, 1998-2007, Rappel Bases de Donnes

Buv

La Jointure externe (iii)


LEFT OUTER JOIN
NB
100
101
102
103

Conso NB
100
100
100
101
101
102

Nom
Al
Ben
Charlie
David
Qte
50
25
75
100
50
25

NB
100
100
100
101
101
102
103

Nom
Al
Al
Al
Ben
Ben
Charlie
David

NB
100
100
100
101
101
102
Null

Qte
50
25
75
100
50
25
Null

Nom
Al
Ben
Charlie
David

Qte
150
150
25
0

24

18/09/2008

Didier Donsez, 1998-2007, Rappel Bases de Donnes

Buv

La Jointure externe (iv)


FULL OUTER JOIN
NB
100
101
102
103

Conso NB
100
100
100
101
101
102
104

Nom
Al
Ben
Charlie
David
Qte
50
25
75
100
50
25
125

NB
100
100
100
101
101
102
103
Null

Nom
Al
Al
Al
Ben
Ben
Charlie
David
Null

NB
100
100
100
101
101
102
Null
104

Qte
50
25
75
100
50
25
Null
125

25

18/09/2008

La Jointure externe (v)




Syntaxe Oracle
SELECT
FROM
WHERE
GROUP BY

Didier Donsez, 1998-2007, Rappel Bases de Donnes

Syntaxe SQLBase, DB2


SELECT
FROM
WHERE
GROUP BY

BUVEURS.NOM, BUVEURS.NB, SUM(NVL(CONSO.QTE,0))


BUVEURS, CONSO
BUVEURS.NB (+) = CONSO.NB
BUVEURS.NOM, BUVEURS.NB;
BUVEURS.NOM, BUVEURS.NB, SUM(NVL(CONSO.QTE,0))
BUVEURS (+), CONSO
BUVEURS.NB = CONSO.NB
BUVEURS.NOM, BUVEURS.NB;

Syntaxe Sybase
SELECT
FROM
WHERE
GROUP BY

BUVEURS.NOM, BUVEURS.NB, SUM(NVL(CONSO.QTE,0))


BUVEURS, CONSO
BUVEURS.NB += CONSO.NB
BUVEURS.NOM, BUVEURS.NB;
26

18/09/2008

Didier Donsez, 1998-2007, Rappel Bases de Donnes

Puzzle de Joe Celko (www.dbmsmag.com)




La table NAME contient ces 13 noms

On veut ce tableau
name1
name2
name3
name4
=================================
Al
Ben
Charlie
David
Ed
Frank
Greg
Howard
Ida
Joe
Ken
Larry
Mike
NULL
NULL
NULL

27

18/09/2008

Elment de rponse

Didier Donsez, 1998-2007, Rappel Bases de Donnes

Que donne cette requte ?

SELECT N1.name, MIN(N2.name) AS name2


FROM Names AS N1 LEFT OUTER JOIN Names AS N2 ON N1.name < N2.name
WHERE N1.name
IN (
SELECT A.name FROM Names AS A INNER JOIN Names AS B ON A.name <=
B.name
GROUP BY A.name
HAVING MOD(COUNT(B.name), 2) = (SELECT MOD(COUNT(*),2) FROM Names)
)
GROUP BY N1.name
ORDER BY N1.name;

28

18/09/2008

Didier Donsez, 1998-2007, Rappel Bases de Donnes

La rponse
SELECT N1.name,
MIN(N2.name) AS name2,
MIN(N3.name) AS name3,
MIN(N4.name) AS name4,
MIN(N5.name) AS name5
FROM (Names AS N1
LEFT OUTER JOIN
Names AS N2
ON N1.name < N2.name)
LEFT OUTER JOIN
Names AS N3
ON N1.name < N2.name
AND N2.name < N3.name
LEFT OUTER JOIN
Names AS N4
ON N1.name < N2.name
AND N2.name < N3.name
AND N3.name < N4.name

LEFT OUTER JOIN


Names AS N5
ON N1.name < N2.name
AND N2.name < N3.name
AND N3.name < N4.name
AND N4.name < N5.name
WHERE N1.name IN (SELECT A.name
FROM Names AS A
INNER JOIN
Names AS B
ON A.name <= B.name
GROUP BY A.name
HAVING MOD(COUNT(B.name), 5) =
(SELECT MOD(COUNT(*),5)
FROM Names))
GROUP BY N1.name ORDER BY N1.name;

29

18/09/2008

Le calcul du Rang (Top Five)




On veut connatre le rang des buveurs en


consommation (jusqu la 5me place)
par couleur
COUNT(Distinct Qte)

Didier Donsez, 1998-2007, Rappel Bases de Donnes

COUNT(Qte)

Conso Nom
Alice
Bob
Cary
Daniel
Eric
Frank
Gilles

Couleur
Rouge
Rouge
Rouge
Rouge
Rouge
Rouge
Rouge

Qte
1000
900
800
800
700
600
600

Rang
1
2
3
3
4
5
5

Rang
1
2
4
4
5
7
7
30

18/09/2008

Le calcul du Rang (Top5)

Didier Donsez, 1998-2007, Rappel Bases de Donnes

La rponse
SELECT C0.Couleur, C0.Nom, C0.Qte,
(SELECT COUNT(DISTINCT Qte) FROM Conso AS C1
WHERE (C1.Qte >=C0.Qte) AND (C1.Couleur=C0.Couleur))
AS RANG
FROM Conso AS C0
WHERE RANG<= :n; -- n est ajustable (5 pour un Top5)

31

18/09/2008

Les Vues (Views)




Schma Externe


Exemple



Didier Donsez, 1998-2007, Rappel Bases de Donnes

dfinit partir du schma conceptuel ou d une autre vue

Vue sur les vins rouges


Vue sur les gros buveurs (quantit totale > 100)

CREATE VIEW GROSBUVEURS(NB, NOM, VILLE, QTE)


AS SELECT
NB, NOM, VILLE, SUM(QTE)
FROM
BUVEURS, CONSO
WHERE BUVEURS.NB=CONSO.NB
GROUP BY NB
HAVING SUM(QTE) > (SELECT AVG(QTETOT) FROM
(SELECT SUM(QTE) AS QTETOT FROM CONSO GROUP BY NB))


Modification sur une vue




pas toujours possible ( moins d un trigger INSTEAD OF)


32

18/09/2008

Les Modifications


Insertion


Inserer un nouveau tuple dcrivant un Riesling de 1997


INSERT INTO VINS (NV, CRU, MILL, COULEUR)
VALUES (RIES1, Riesling, 1997, Blanc)

Didier Donsez, 1998-2007, Rappel Bases de Donnes

Modification de tuples


Augmenter de 1 les consommations du buveur 101


UPDATE CONSO SET QTE = CONSO.QTE + 1
WHERE (CONSO.NB=101)

Suppression de tuples


Supprimer les consommations des buveurs habitant Paris


DELETE FROM CONSO
WHERE NB IN (SELECT NB FROM BUVEURS WHERE VILLE = Paris)
33

18/09/2008

Les limites de SQL




Compatibilit SQL92 des SGBDs




Programmation Procdurale


Didier Donsez, 1998-2007, Rappel Bases de Donnes

puzzle de Joe Celko, rang (Top Ten), ...


Rponse : Embedded SQL, ODBC/JDBC, PL/SQL,

Rcursion



3 niveaux (Full, Intermediate, Entry)

relation composant/compos, graphe, arbre,


Rponse : SQL3

Orientation-Objet



Abstraction, Spcialisation, Gnralisation


Rponse : SQL3 et le modle Objet-Relationnel
34

18/09/2008

Conception de Bases de Donnes




2 approches complmentaires

Thorie de la Normalisation



Dterminer les attributs et leurs dpendances


Dcomposer la relation universel en 3me forme normale

Didier Donsez, 1998-2007, Rappel Bases de Donnes

suppression des redondances

Modle Entit-Association E/A [Chen79]





Concept repris par tous (MERISE, OMT, , UML)


Modliser en Entit et en Association
Etudiants

numss nom adresse anne




Cours

Suivre
code

titre heures

Transformation vers le modle relationnel

35

18/09/2008

Bibliographie


Chris Date, "Introduction aux Bases de Donnes", 6me


dition, Ed Intl Thomson Publ. ISBN 2-84180-964-1, 970
pp


Didier Donsez, 1998-2007, Rappel Bases de Donnes

7me dition en anglais

Jeffrey D. Ullman, Jennifer Widom, "A First Course in


Database Systems", 1re dition, Ed. Prentice Hall
Engineering, Science & Math, Avril 1997, ISBN 0-13861337-0, 470 pp.
G. Gardarin, "Bases de Donnes Objet et Relationnel",
Ed Eyrolles, 1999, ISBN 2-212-09060-9
Joe Celko, "SQL Avanc", 1997, Ed Intl Thomson Publ.,
ISBN 2-84180-141-1
www.dbmsmag.com

36

Você também pode gostar