0% ont trouvé ce document utile (0 vote)
17 vues47 pages

Algèbre relationnelle et SQL : opérations clés

Le document traite des opérations d'algèbre relationnelle et de SQL, y compris l'union, l'intersection, la différence, la division et le produit cartésien. Il explique également comment effectuer des jointures entre les tables en utilisant des pivots et des conditions spécifiques. Des exemples pratiques illustrent chaque opération, notamment des requêtes SQL correspondantes.

Transféré par

tahinaniaina04
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
17 vues47 pages

Algèbre relationnelle et SQL : opérations clés

Le document traite des opérations d'algèbre relationnelle et de SQL, y compris l'union, l'intersection, la différence, la division et le produit cartésien. Il explique également comment effectuer des jointures entre les tables en utilisant des pivots et des conditions spécifiques. Des exemples pratiques illustrent chaque opération, notamment des requêtes SQL correspondantes.

Transféré par

tahinaniaina04
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Base de données

Séance 7

Algèbre relationnelle et SQL :


- Opérations ensemblistes
- Jointures
Algèbre relationnelle et SQL

Opérations ensemblistes (binaires) :


1. Union
2. Intersection
3. Différence
4. Division
5. Produit cartésien
Union
 Opération portant sur deux relations de même
schéma R1 et R2, consistant à construire une
relation R3
 de même schéma
 ayant pour enregistrements ceux appartenant à R1 ou R2
ou aux deux relations.
Résultat

R3 = R1 U R2
U

Relation 1 Relation 2
Union : exemple

VINS Cru Mill Région VINS Cru Mill Région


CHENAS 1983 BEAUJOLAIS CHENAS 1983 BEAUJOLAIS
TOKAY 1980 ALSACE TOKAY 1980 ALSACE
TAVEL 1986 RHONE CHABLIS 1986 BOURGOGNE
ST-EMILION 1987 BORDELAIS

VINS Cru Mill Région


CHENAS 1983 BEAUJOLAIS
TOKAY 1980 ALSACE
TAVEL 1986 RHONE
R1 U R2 = CHABLIS 1986 BOURGOGNE
ST-EMILION 1987 BORDELAIS
Union en SQL
 Même nombre de colonnes
 Même type de colonnes
 Opération ensembliste : pas de doublons

 Exemple : nom et prénom des étudiants


et professeurs de l’EISTI
SELECT nom, prenom FROM etudiant
UNION
SELECT nom, prenom FROM professeur
Intersection
 Opération portant sur deux relations de même
schéma R1 et R2, consistant à construire une
relation R3 :
 de même schéma
 ayant pour enregistrements ceux appartenant aux deux
relations.
Résultat

R3 = R1 Π R2 Π

Relation 1 Relation 2
Intersection : exemple

VINS Cru Mill Région VINS Cru Mill Région


CHENAS 1983 BEAUJOLAIS CHENAS 1983 BEAUJOLAIS
TOKAY 1980 ALSACE TOKAY 1980 ALSACE
TAVEL 1986 RHONE CHABLIS 1986 BOURGOGNE
ST-EMILION 1987 BORDELAIS

VINS Cru Mill Région


CHENAS 1983 BEAUJOLAIS
R1 Π R2 = TOKAY 1980 ALSACE
Intersection en SQL

 Exemple :
 nom et prénom des professeurs étudiants :
SELECT nom, prenom FROM etudiant
INTERSECT SELECT nom, prenom FROM professeur;
Différence
 Opération portant sur deux relations de même
schéma R1 et R2, consistant à construire une
relation R3 :
 de même schéma
 ayant pour enregistrements ceux appartenant à R1 et
n’appartenant pas à R2.
Résultat

R3 = R1 – R2 -

Relation 1 Relation 2
Exemple

VINS Cru Mill Région VINS Cru Mill Région


CHENAS 1983 BEAUJOLAIS CHENAS 1983 BEAUJOLAIS
TOKAY 1980 ALSACE TOKAY 1980 ALSACE
TAVEL 1986 RHONE CHABLIS 1986 BOURGOGNE
ST-EMILION 1987 BORDELAIS

VINS Cru Mill Région


TAVEL 1986 RHONE
R1 - R2 =
Différence en SQL
 Exemple :
 nom et prénom des étudiants qui ne sont pas
professeurs :
SELECT nom, prenom FROM etudiant
MINUS SELECT nom, prenom FROM professeur;
Division
 Opération portant sur deux relations R1 et R2, le schéma
de R2 est inclus dans celui de R1.
 Construit une relation dont le schéma
contient tous les attributs de R1
qui ne sont pas dans R2. Résultat
 Le résultat est formé de tous les
n-uplets qui, concaténés à
chacun des n-uplets du ÷
diviseur R2, donne toujours
un n-uplet du dividende R1
R1 R2

R3 = R1 ÷ R2
Division : Exemple

INSCRIT Etudiant Matiere MATIERE Matiere


DERAY BDD1 BDD1
DUPONT BDD1 JAVA
DUPONT ELEC
DERAY JAVA
DURAND JAVA

DIVISION Etudiant
DERAY
R1 ÷ R2 =
Division en SQL

 Pas d’équivalent direct en SQL


=> cours 8 : requêtes complexes !
Produit cartésien
 Opération portant sur deux relations R1 et R2
consistant à construire une relation R3 :
 ayant pour schéma la concaténation de ceux des relations
opérandes
 et pour enregistrements toutes les combinaisons des
enregistrements des relations opérandes.
Résultat

R3 = R1 x R2
x

Relation 1 Relation 2
Produit cartésien : exemple

VINS Cru Mill Région BUVEURS Nom Prénom


CHENAS 1983 BEAUJOLAIS Dupont Jacques
TOKAY 1980 ALSACE Martin Jean
TAVEL 1986 RHONE

VB Cru Mill Région Nom Prénom


CHENAS 1983 BEAUJOLAIS Dupont Jacques
TOKAY 1980 ALSACE Dupont Jacques
TAVEL 1986 RHONE Dupont Jacques
R1 x R2 = CHENAS 1983 BEAUJOLAIS Martin Jean
TOKAY 1980 ALSACE Martin Jean
TAVEL 1986 RHONE Martin Jean
Produit cartésien
 En SQL, le produit cartésien s’obtient en faisant un
select sur deux tables :
SELECT * FROM table1, table2;

 Le produit cartésien présente peu d’intérêt en soi :


 lien entre les données ?
 jointure !
Jointure à partir du produit cartésien
 Pour effectuer le produit A x B, on
confronte chaque enregistrement de A à
tous les enregistrements de B.

18
Jointure à partir du produit cartésien
 Toutes les combinaisons ne sont pas
pertinentes.
Mobilier
Nombre de pieds Table 4
Table 4
Chaise 3
Tabouret 2 Chaise 4
Echelle
x
Tabouret 3

On doit indiquer comment


sélectionner les bonnes Echelle 2

19
1) Jointure avec pivot
 La jointure de relations (ou tables) s'effectue
en effectuant une restriction sur le produit
cartésien à l’aide d’un pivot.

 σA.c1=B.c2(A x B)

 SELECT * FROM A, B
WHERE A.c1 = B.c2;
 Le pivot introduit une contrainte qui réduit les
croisements possibles.

20
Croiser plus de deux tables
 Pour effectuer des jointures
multiples sur plus de deux tables, on
étend le pivot :
 σ<PIVOT1> and <PIVOT2>(R1 x R2 x R3)

 SELECT * FROM T1, T2, T3


WHERE <PIVOT1> AND <PIVOT2>;

21
Jointure sur un identifiant : ambiguïtés
 Attention aux ambigüités lorsqu’un attribut du
pivot est présent dans les 2 relations
σid_manager = id(employe x manager)
id ?
SELECT * FROM employe, manager employe
ou manager
WHERE id_manager = id;
 Préfixer ou renommer :
σid_manager = [Link](employe x manager)
SELECT * FROM employe, manager
WHERE id_manager = [Link];
22
2) Opération de jointure : définition

 Opération consistant à rapprocher selon une


condition les enregistrements de deux relations R1
et R2
 Produit une relation R3 qui contient l’ensemble de tous
les enregistrements obtenus en concaténant un
enregistrement de R1 et un enregistrement de R2
vérifiant la condition de rapprochement.
 Equivalente à la restriction avec pivot sur le produit
cartésien
Jointure
 Notations algébriques :
Résultat
R3 = R1 Ai op Bi R2

Ξ σAi op Bi (R1 x R2)


Ai op Bi

Relation 1 Relation 2

 SQL :
SELECT * FROM T1 [INNER] JOIN T2
ON [Link] op [Link];
Différentes jointures
 Équi-jointure : opérateur =
 θ-jointure : opérateurs <, ≤, >, ≥, <>
 Jointure naturelle :
 La jointure se fait sur les attributs de même
nom (avec les mêmes types)
 Les attributs de la relation résultat sont l’union
des attributs de R1 et R2
 Notations
 R3 = R1 R2
 SELECT * FROM T1 NATURAL JOIN T2
La jointure naturelle
Pivot naturel
Tab1 Tab2
col1 col12 col1 col22
a x Lignes avec a 1
correspondance
b y b 2
Lignes sans
c z d 3
correspondance

26
Jointure naturelle vs équi-jointure
tab1 tab2 tab1 tab2
SELECT *
col1 col12 col1 col22
FROM tab1
a x a 1 NATURAL JOIN tab2;
b y b 2
c z d 3 ax1
by2
tab1 tab1.col1=tab2.col1 tab2
SELECT * FROM tab1 t1 axa1
JOIN tab2 t2 byb2
ON t1.col1 = t2.col1;
27
La jointure naturelle : exemple 1
VINS Cru Mill Qualité
VOLNAY 1983 A
VOLNAY 1979 B
CHABLIS 1983 A
JULIENAS 1986 C

LOCALISATION Cru Région QualMoy


VOLNAY Bourgogne A
CHABLIS Bourgogne A
CHABLIS Californie B

VINSREG Cru Mill Qualité Région QualMoy


VOLNAY 1983 A Bourgogne A
VOLNAY 1979 B Bourgogne A
CHABLIS 1983 A Bourgogne A
CHABLIS 1983 A Californie B
La jointure naturelle : exemple 2
 Liste des noms de producteur ayant récolté
du vin :
 recolte producteur
 SELECT nom
FROM recolte NATURAL JOIN producteur ;

29
Jointure interne ou pivot ?
tab1 tab2 SELECT *
col11 col12 col21 col22 FROM tab1 t1,tab2 t2
WHERE t1.col11 =
a x a 1 t2.col21;
b y b 2
c z d 3
axa1
SELECT * FROM tab1
byb2
INNER JOIN tab2
ON tab1.col11 =
tab2.col21
30
Exemple complet
Individu(num_ind, nom, prenom)
Jouer(num_ind, num_film, role)
Film(num_film, num_ind, titre, genre, annee)
Projection(num_cine, num_film, pdate)
Cinéma(num_cine, nom, adresse)

 Quels sont les cinémas qui ont projeté des


films dans lesquels a joué Travolta ?
Exemple complet
Individu(num_ind, nom, prenom)
Jouer(num_ind, num_film, role)
Film(num_film, num_ind, titre, genre, annee)
Projection(num_cine, num_film, pdate)
Cinéma(num_cine, nom, adresse)

 Quels sont les cinémas qui ont projeté des


films dans lesquels a joué Travolta ?
Exemple complet
Individu(num_ind, nom, prenom)
Jouer(num_ind, num_film, role)
Film(num_film, num_ind, titre, genre, annee)
Projection(num_cine, num_film, pdate)
Cinéma(num_cine, nom, adresse)

 Quels sont les cinémas qui ont projeté des


films dans lesquels a joué Travolta ?
Exemple complet
Individu(num_ind, nom, prenom)
Jouer(num_ind, num_film, role)
Film(num_film, num_ind, titre, genre, annee)
Projection(num_cine, num_film, pdate)
Cinéma(num_cine, nom, adresse)

 Quels sont les cinémas qui ont projeté des


films dans lesquels a joué Travolta ?
Exemple complet
Individu(num_ind, nom, prenom)
Jouer(num_ind, num_film, role)
Film(num_film, num_ind, titre, genre, annee)
Projection(num_cine, num_film, pdate)
Cinéma(num_cine, nom, adresse)

 Quels sont les cinémas qui ont projeté des


films dans lesquels a joué Travolta ?
Exemple complet
Individu(num_ind, nom, prenom)
Jouer(num_ind, num_film, role)
Film(num_film, num_ind, titre, genre, annee)
Projection(num_cine, num_film, pdate)
Cinéma(num_cine, nom, adresse)

 Quels sont les cinémas qui ont projeté des


films dans lesquels a joué Travolta ?
1. Jointure avec pivot
Individu(num_ind, nom, prenom)

Jouer(num_ind, num_film, role)

Film(num_film, num_ind, titre, genre, annee)

Projection(num_cine, num_film, pdate)

Cinéma(num_cine, nom, adresse)

 Quels sont les cinémas qui ont projeté des films dans
lesquels a joué Travolta ?
1. Jointure avec pivot
Individu(num_ind, nom, prenom)

Jouer(num_ind, num_film, role)

Film(num_film, num_ind, titre, genre, annee)

Projection(num_cine, num_film, pdate)

Cinéma(num_cine, nom, adresse)

 Quels sont les cinémas qui ont projeté des films dans
lesquels a joué Travolta ?
1. Jointure avec pivot
Individu(num_ind, nom, prenom)

Jouer(num_ind, num_film, role)

Film(num_film, num_ind, titre, genre, annee)

Projection(num_cine, num_film, pdate)

Cinéma(num_cine, nom, adresse)

 Quels sont les cinémas qui ont projeté des films dans
lesquels a joué Travolta ?
1. Jointure avec pivot
Individu(num_ind, nom, prenom)

Jouer(num_ind, num_film, role)

Film(num_film, num_ind, titre, genre, annee)

Projection(num_cine, num_film, pdate)

Cinéma(num_cine, nom, adresse)

 Quels sont les cinémas qui ont projeté des films dans
lesquels a joué Travolta ?
1. Jointure avec pivot
Individu(num_ind, nom, prenom)

Jouer(num_ind, num_film, role)

Film(num_film, num_ind, titre, genre, annee)

Projection(num_cine, num_film, pdate)

Cinéma(num_cine, nom, adresse)

 Quels sont les cinémas qui ont projeté des films dans
lesquels a joué Travolta ?
1. Jointure avec pivot
SELECT DISTINCT [Link]
FROM cinema c, projection p, film f, jouer j, individu i
WHERE c.num_cine = p.num_cine
AND p.num_film = f.num_film
AND f.num_film = j.num_film
AND j.num_ind = i.num_ind
AND [Link] = 'Travolta';

4 pivots + 1 sélection + 1 projection


2. Jointure interne
SELECT DISTINCT [Link]
FROM cinema c
JOIN projection p ON c.num_cine = p.num_cine
JOIN film f ON p.num_film = f.num_film
JOIN jouer j ON f.num_film = j.num_film
JOIN individu i ON j.num_ind = i.num_ind
WHERE [Link] = 'Travolta';

4 jointures + 1 sélection + 1 projection


3. Jointure naturelle
SELECT DISTINCT nom
FROM cinema NATURAL JOIN projection
NATURAL JOIN film
NATURAL JOIN jouer
NATURAL JOIN individu
WHERE nom = 'Travolta';

Problème : ambiguïtés sur les colonnes qui


portent le même nom, on peut préciser celle(s)
à utiliser avec la clause USING mais à EVITER !
Ambigüité jointure naturelle
Individu(num_ind, nom, prenom)

Jouer(num_ind, num_film, role)

Film(num_film, num_ind, titre, genre, annee)

Projection(num_cine, num_film, pdate)

Cinéma(num_cine, nom, adresse)

 Quels sont les cinémas qui ont projeté des films dans
lesquels a joué Travolta ? Donner le nom des cinémas
et le titre des films.
Ambigüité jointure naturelle
Individu(num_ind, nom, prenom)

Jouer(num_ind, num_film, role)

Film(num_film, num_ind, titre, genre, annee)

Projection(num_cine, num_film, pdate)

Cinéma(num_cine, nom, adresse)

 Quels sont les cinémas qui ont projeté des films dans
lesquels a joué Travolta ? Donner le nom des cinémas
et le titre des films.
Ambigüité jointure naturelle
Individu(num_ind, nom, prenom)

Jouer(num_ind, num_film, role)

Film(num_film, num_ind, titre, genre, annee)

Projection(num_cine, num_film, pdate)

Cinéma(num_cine, nom, adresse)

 Quels sont les cinémas qui ont projeté des films dans
lesquels a joué Travolta ? Donner le nom des cinémas
et le titre des films.

Vous aimerez peut-être aussi