Académique Documents
Professionnel Documents
Culture Documents
Ch.1.SQL Al Relationnelle Introduction Langage SQL PDF
Ch.1.SQL Al Relationnelle Introduction Langage SQL PDF
Chapitre 1 -
Algbre Relationnelle
et Introduction au Langage SQL
Sources du document :
Sources du document :
Site sql.developpez.com ;
Manuel SQL PostgreSQL (existe en plusieurs versions HTML, PDF).
Olivier Mondet
http://unidentified-one.net
A. Les requtes
Une requte est destine obtenir des informations prcises et ordonnes sur la base de donnes. On
peut galement par le biais des requtes :
effectuer des calculs,
obtenir des statistiques,
modifier les tables,
crer de nouvelles tables
grer des utilisateurs
B. Lalgbre relationnelle
Bas sur le langage algbrique de Codd (Edgar Frank Codd dcd en 2003, pre entre autre des
Forme Normales ).
Les oprations spcifiques sont unitaires comme la Projection et la Slection (une relation manipule)
ou binaire comme la Jointure.
Plusieurs types de Jointures existent : Equijointure (ou jointure naturelle), Jointure externe gauche ou
droite (cela sera dtaill avec la clause JOIN dans le chapitre qui suit).
Notion de t-uplet :
Pour une relation de degr t, chaque occurrence de cette relation est un t-uplet (ou tuple).
C. Oprateurs de base
C.1. La projection
La projection permet dextraire des donnes dune table, en ne conservant que les colonnes souhaites.
Notation :
R2 = PROJECTION R1(Nom-Champ, Nom-Champ)
Instructions SQL :
SELECT Nom-Table.Nom-Champ, Nom-Table.Nom-Champ
FROM Nom-Table;
Exemple :
Soit la table FILM qui permet de grer une vidothque.
FILM
Ch.1 - Algbre Relationnelle, Introduction au Langage SQL.doc page 2 / 10 om (2001-2005)
no-film titre dure production code-catgorie
10 Camille Claudel 150 Gaumont COMD
20 Fentre sur cour 120 Path COMD
25 Sueurs froides 115 Path COMD
50 Cendrillon 140 UGC DESA
64 Super Mondet II 10 Universal DOCU
65 La vie des coccinelles 60. UGC DOCU
71 La guerre des toiles I 120 Paramounth COMD
... ... ...
On veut faire une projection des colonnes no-film et titre de la table FILM :
En langage algbrique :
R1 = PROJECTION FILM(no-film, titre)
Traduction en SQL :
SELECT FILM.no-film, FILM.titre
FROM FILM;
RSULTAT REQUTE
no-film titre
10 Camille Claudel
20 Fentre sur cour
25 Sueurs froides
50 Cendrillon
64 Super Mondet II
65 La vie des coccinelles
71 La guerre des toiles I
... ...
C.2. La slection
Permet dextraire les lignes dune table qui vrifient la ralisation dune certaine condition (on parle
parfois de critre).
Notation :
R2 = SELECTION R1(Expression conditionnelle)
R1 et R2 sont deux relations, entre parenthses figure le critre de slection.
Instructions SQL :
SELECT Nom-Table.Nom-Champ, Nom-Table.Nom-Champ
FROM Nom-Table
WHERE Critre de slection;
FILM
no-film titre dure production code-catgorie
10 Camille Claudel 150 Gaumont COMD
20 Fentre sur cour 120 Path COMD
25 Sueurs froides 115 Path COMD
50 Cendrillon 140 UGC DESA
64 Super Mondet II 10 Universal DOCU
65 La vie des coccinelles 60. UGC DOCU
71 La guerre des toiles I 120 Paramounth COMD
... ... ...
En langage algbrique :
R1 = SELECTION FILM(production = "Path")
R2 = PROJECTION R1(titre)
Traduction en SQL :
SELECT FILM.titre
FROM FILM
WHERE FILM.production = "Path";
RSULTAT REQUTE
titre
Fentre sur cour
Sueurs froides
C.3. La jointure
La jointure consiste donc combiner deux tables ligne ligne en vrifiant la concordance entre
certaines colonnes des deux tables. Autrement dit, cela permet de relier deux tables ayant un champ
commun et de faire correspondre les lignes qui ont une mme valeur.
Notation :
R3 = R1 ZY R2 (Expression conditionnelle)
Ou
R3 = JOINTURE R1.R2 (Expression conditionnelle)
R1 et R2 sont deux relations, entre parenthses figure le critre de jointure.
Instructions SQL :
SELECT Nom-Table.Nom-Champ, Nom-table.Nom-Champ
FROM Nom-Table, Nom-Table
WHERE Condition de jointure;
FILM
no-film titre dure production code-catgorie
10 Camille Claudel 150 Gaumont COMD
20 Fentre sur cour 120 Path COMD
25 Sueurs froides 115 Path COMD
50 Cendrillon 140 UGC DESA
64 Super Mondet II 10 Universal DOCU
65 La vie des coccinelles 60. UGC DOCU
71 La guerre des toiles I 120 Paramounth COMD
... ... ...
CATGORIE
code-catgorie libell-catgorie
COMD comdie dramatique
DESA dessin anim
DOCU documentaire
... ...
On souhaiterait avoir le titre des films ainsi que les libells de leurs catgories (et non leur code).
En langage algbrique :
R1 = FILM ZY CATGORIE (FILM.code-catgorie = CATGORIE.code-catgorie)
R2 = PROJECTION R1(titre, libell-catgorie)
Traduction en SQL :
SELECT FILM.titre, CATGORIE.libell-catgorie
FROM FILM, CATGORIE
WHERE FILM.code-catgorie = CATGORIE.code-catgorie;
RSULTAT REQUTE
titre libell-catgorie
Camille Claudel comdie dramatique
Fentre sur cour comdie dramatique
Sueurs froides comdie dramatique
Cendrillon dessin anim
Super Mondet II documentaire
La vie des coccinelles documentaire
La guerre des toiles I comdie dramatique
Remarque n1 :
Il est bien videment possible de faire plusieurs jointures, autant quil y a de tables relier entre elles.
Equijointure : le pivot utilise loprateur = (jointure naturelle)
Thtajointure : le pivot utilise les oprateurs <, <=, >, >=, != ou <>
Remarque n2 :
Il est possible dutiliser des alias (pour simplifier) pour nommer une table diffremment dans la
requte.
Par exemple :
SELECT F.titre, C.libell-catgorie
FROM FILM F, CATGORIE C
WHERE F.code-catgorie = C.code-catgorie;
Une requte dextraction de donnes sur une base de donnes est la plupart du temps une
combinaison astucieuse des trois oprations de base.
On peut donc selon les besoins combiner les instructions. Loprateur AND permet davoir plusieurs
conditions de slection. Linstruction ORDER BY permet de trier selon lordre dun des champs
(ASCendant ou DESCendant).
Exemple :
Soient les tables FILM et CATGORIE qui permettent de grer une vidothque.
FILM
no-film titre dure production code-catgorie
10 Camille Claudel 150 Gaumont COMD
20 Fentre sur cour 120 Path COMD
25 Sueurs froides 115 Path COMD
50 Cendrillon 140 UGC DESA
64 Super Mondet II 10 Universal DOCU
65 La vie des coccinelles 60. UGC DOCU
71 La guerre des toiles I 120 Paramounth COMD
... ... ...
CATGORIE
code-catgorie libell-catgorie
COMD comdie dramatique
DESA dessin anim
DOCU documentaire
... ...
On souhaiterait avoir le numro, le titre des films, les libells des catgories auxquelles ils
appartiennent uniquement pour les films de plus de 100 minutes. Le tout tri alphabtiquement (ordre
ascendant) selon le titre du film.
En langage algbrique :
R1 = FILM ZY CATGORIE (FILM.code-catgorie = CATGORIE.code-catgorie)
R2 = SELECTION R1(R1.Dure > 100)
R3 = PROJECTION R2(no-film, titre, libell-catgorie)
Traduction en SQL :
SELECT FILM.no-film, FILM.titre, CATGORIE.libell-catgorie
FROM FILM, CATGORIE
WHERE FILM.code-catgorie = CATGORIE.code-catgorie;
AND FILM.Dure > 100
ORDER BY FILM.titre ASC;
Traduction en SQL :
SELECT FILM.no-film, FILM.titre, CATGORIE.Libell-catgorie
FROM FILM, CATGORIE
WHERE FILM.code-catgorie = CATGORIE.code-catgorie;
AND FILM.Dure > 100
ORDER BY FILM.titre DESC;
RSULTAT REQUTE
no-film titre libell-catgorie
64 Super Mondet II documentaire
25 Sueurs froides comdie dramatique
65 La vie des coccinelles documentaire
71 La guerre des toiles I comdie dramatique
20 Fentre sur cour comdie dramatique
50 Cendrillon dessin anim
10 Camille Claudel comdie dramatique
Notation :
R3 = R1 R2
Ou
R3 = UNION (R1, R2)
Instructions SQL :
SELECT Nom-Champ, Nom-Champ,
FROM Nom-Table1
UNION
SELECT Nom-Champ, Nom-Champ,
FROM Nom-Table2;
On peut utiliser UNION [ALL] pour avoir toutes les lignes communes aux deux tables (y compris celles
en double), sans cela les doublons sont limins.
ANGLAIS
nocandidat nomcandidat prnomcandidat numtablissement
10123 DUPONT Patrick 94010
10216 GRANGETTE Didier 75100
10309 HERISSON Patrick 94010
10405 MAGNAN Hlne 75250
10505 SERRES Sylvia 94010
ESPAGN
nocandidat nomcandidat prnomcandidat numtablissement
10025 ACQUINO Patricia 91260
10216 GRANGETTE Didier 75100
10505 SERRES Sylvia 94010
On souhaiterait obtenir la liste des candidats passant les preuves danglais ou despagnol (lunion
des deux tables) (sans doublons).
En langage algbrique :
R1 = ANGLAIS ESPAGN
Traduction en SQL :
SELECT *
FROM ANGLAIS
UNION
SELECT *
FROM ESPAGN;
RSULTAT REQUTE
nocandidat nomcandidat prnomcandidat numtablissement
10123 DUPONT Patrick 94010
10216 GRANGETTE Didier 75100
10309 HERISSON Patrick 94010
10405 MAGNAN Hlne 75250
10505 SERRES Sylvia 94010
10025 ACQUINO Patricia 91260
Notation :
R3 = R1 R2
Ou
R3 = INTERSECTION (R1, R2)
Instructions SQL :
SELECT Nom-Champ, Nom-Champ,
FROM Nom-Table1
INTERSECT
SELECT Nom-Champ, Nom-Champ,
FROM Nom-Table2;
ANGLAIS
nocandidat nomcandidat prnomcandidat numtablissement
10123 DUPONT Patrick 94010
10216 GRANGETTE Didier 75100
10309 HERISSON Patrick 94010
10405 MAGNAN Hlne 75250
10505 SERRES Sylvia 94010
ESPAGN
nocandidat nomcandidat prnomcandidat numtablissement
10025 ACQUINO Patricia 91260
10216 GRANGETTE Didier 75100
10505 SERRES Sylvia 94010
On souhaiterait obtenir souhaiterait obtenir la liste des candidats passant les preuves danglais et
despagnol (lintersection des deux tables).
En langage algbrique :
R1 = ANGLAIS ESPAGN
Traduction en SQL :
SELECT *
FROM ANGLAIS
INTERSECT
SELECT *
FROM ESPAGN;
RSULTAT REQUTE
nocandidat nomcandidat prnomcandidat numtablissement
10216 GRANGETTE Didier 75100
10505 SERRES Sylvia 94010
Notation :
R3 = R1 - R2 R3 = R2 R1
Ou
R3 = DIFFERENCE (R1, R2) R3 = DIFFERENCE (R1, R2)
Instructions SQL :
SELECT Nom-Champ, Nom-Champ, SELECT Nom-Champ, Nom-Champ,
FROM Nom-Table2 FROM Nom-Table1
MINUS MINUS
SELECT Nom-Champ, Nom-Champ, SELECT Nom-Champ, Nom-Champ,
FROM Nom-Table1; FROM Nom-Table2;
ANGLAIS
nocandidat nomcandidat prnomcandidat numtablissement
10123 DUPONT Patrick 94010
10216 GRANGETTE Didier 75100
10309 HERISSON Patrick 94010
10405 MAGNAN Hlne 75250
10505 SERRES Sylvia 94010
ESPAGN
nocandidat nomcandidat prnomcandidat numtablissement
10025 ACQUINO Patricia 91260
10216 GRANGETTE Didier 75100
10505 SERRES Sylvia 94010
On souhaiterait obtenir souhaiterait obtenir la liste des candidats passant les preuves danglais
seulement.
En langage algbrique :
R1 = ANGLAIS - ESPAGN
Traduction en SQL :
SELECT *
FROM ANGLAIS
MINUS
SELECT *
FROM ESPAGN;
Il est possible de combiner les oprateurs UNION, INTERSECT et MINUS, il faut pour cela utiliser des
parenthses pour dterminer les ordres de priorit de ces oprateurs.
ANGLAIS
nocandidat nomcandidat Prnomcandidat numtablissement
10123 DUPONT Patrick 94010
10309 HERISSON Patrick 94010
10405 MAGNAN Hlne 75250
Olivier Mondet
http://unidentified-one.net