Aller au contenu

TNSI : BDD - Opérations entre Tables/Relations⚓︎

Introduction - Algèbre Relationnelle⚓︎

L'idée est de donner un sens à des opérations entre les tables, inspiré de ce qui se fait en mathématiques, en particulier de la théorie des ensembles. L'ensemble des tables et des opérations entre les tables est appelée Algèbre Relationnelle.

Union⚓︎

Union

Soit \(T_1\) et \(T_2\) deux tables/entités d'une base de données. L'Union des deux tables \(T_1\) et \(T_2\), est l'ensemble des éléments qui sont \(T_1\) ou bien dans \(T_2\). On la note \(T_1 \cup T_2\)

\[T_1 \cup T_2 = \{ e\in T_1 \text{ ou } e \in T_2 \}\]

Union de deux Tables

On dispose des tables \(T_1\) et \(T_2\) suivantes:

Col

\(T_1\)
nom
Dupont
Dupond
Durand
Dufour
Dumiel

Col

\(\cup\)

Col

\(T_2\)
nom
Dumont
Dufour
Durville
Durail
Dupont

Col

\(=\)

Col

\(T_1 \cup T_2\)
nom
Dupont
Dupond
Durand
Dufour
Dumiel
Dumont
Durville
Durail

Intersection⚓︎

Intersection

Soit \(T_1\) et \(T_2\) deux tables/entités d'une base de données. L'Intersection des deux tables \(T_1\) et \(T_2\), est l'ensemble des éléments qui sont \(T_1\) et aussi dans \(T_2\). On la note \(T_1 \cap T_2\)

\[T_1 \cap T_2 = \{ e\in T_1 \text{ et } e \in T_2 \}\]

Intersection de deux Tables

On dispose des tables \(T_1\) et \(T_2\) suivantes:

Col

\(T_1\)
nom
Dupont
Dupond
Durand
Dufour
Dumiel

Col

\(\cap\)

Col

\(T_2\)
nom
Dumont
Dufour
Durville
Durail
Dupont

Col

\(=\)

Col

\(T_1 \cap T_2\)
nom
Dupont
Dufour

Différence⚓︎

Différence

Soit \(T_1\) et \(T_2\) deux tables/entités d'une base de données. La Différence des deux tables \(T_1\) et \(T_2\), est l'ensemble des éléments qui sont \(T_1\) mais pas dans \(T_2\). On la note \(T_1 - T_2\)

\[T_1 - T_2 = \{ e\in T_1 \text{ et } e \not \in T_2 \}\]

Différence de deux Tables

On dispose des tables \(T_1\) et \(T_2\) suivantes:

Col

\(T_1\)
nom
Dupont
Dupond
Durand
Dufour
Dumiel

Col

\(-\)

Col

\(T_2\)
nom
Dumont
Dufour
Durville
Durail
Dupont

Col

\(=\)

Col

\(T_1 - T_2\)
nom
Dupond
Durand
Dumiel

Produit Cartésien⚓︎

Produit Cartésien

Soit \(T_1\) et \(T_2\) deux tables/entités d'une base de données. Le Produit Cartésien des deux tables \(T_1\) et \(T_2\), est l'ensemble des couples \((e_1,e_2)\) lorsque \(e_1\) parcourt \(T_1\), et \(e_2\) parcourt \(T_2\). On le note \(T_1 \times T_2\)

\[T_1 \times T_2 = \{ (e_1,e_2) \,\, | \,\, e_1 \in T_1 \text{ et } e_2 \in T_2 \}\]

Produit Cartésien de deux Tables

On dispose des tables \(T_1\) et \(T_2\) suivantes:

Col

\(T_1\)
id nom
1 Dupont
2 Dufour
3 Dumiel

Col

\(\times\)

Col

\(T_2\)
quantite prix
\(260\) \(40\)
\(350\) \(17\)

Col

\(=\)

Col

\(T_1 \times T_2\)
id nom quantite prix
\(1\) Dupont \(260\) \(40\)
\(1\) Dupont \(350\) \(17\)
\(2\) Dufour \(260\) \(40\)
\(2\) Dufour \(350\) \(17\)
\(3\) Dumiel \(260\) \(40\)
\(3\) Dumiel \(350\) \(17\)

Sélection \(\sigma\)⚓︎

Sélection

Soit \(T_1\) une table/entité d'une base de données. La Sélection dans une table \(T_1\) est l'opération consistant à ne retenir que les enregistrements de \(T_1\) vérifiant une certaine condition (ou filtre) \(C\) donnée. On la note \(\sigma_C(T_1)\).

Sélection dans une Table

On dispose de la table \(T_1\) suivante:

Col

\(T_1\)
id nom prenom genre
\(1\) Dupont Gaelle Femme
\(2\) Dupond Jean Homme
\(3\) Durand Laura Femme
\(4\) Dufour Sarah Femme
\(5\) Dumiel Paul Homme
\(6\) Durmont Karl Autre

Sélection dans \(T_1\), avec la Requête/Condition \(C=\{\text{genre=Femme}\}\), notée \(\sigma_C(T_1)\) :

Col

Sélection dans \(T_1\)
id nom prenom genre
\(1\) Dupont Gaelle Femme
\(3\) Durand Laura Femme
\(4\) Dufour Sarah Femme

Résultat de la Requête "Sélection avec Condition \(C=\{\text{genre=Femme}\}\) "

Projection \(\pi\)⚓︎

Projection

Soit \(T_1\) une table/entité d'une base de données. La Projection d'une table \(T_1\) est l'opération consistant à ne retenir que certains champs/attributs \(A_1, A_2,.., A_k\) de \(T_1\). On la note \(\pi_{A_1, A_2, ..,A_k}(T_1)\)

Projection d'une Table sur des champs/attributs

On dispose de la table \(T_1\) suivante:

Col

\(T_1\)
id nom prenom genre
\(1\) Dupont Gaelle Femme
\(2\) Dupond Jean Homme
\(3\) Durand Laura Femme
\(4\) Dufour Sarah Femme
\(5\) Dumiel Paul Homme
\(6\) Durmont Karl Autre

Col

Projection de \(T_1\) sur 'id' et 'prenom'
id prenom
\(1\) Gaelle
\(3\) Laura
\(4\) Sarah

Projection \(\pi_{id,prenom}(T_1)\), de \(T_1\) sur 'id' et 'prenom'

Jointures⚓︎

Une jointure est une manière de fusionner virtuellement deux ou plusieurs tables, de manière à ne conserver comme résultats que les enregistrements qui vérifient certaines conditions caractéristiques (de la jointure). Il existe en effet plusieurs types de jointures : C'est la condition choisie qui détermine le type de jointure.

Jointure Interne⚓︎

Jointure Interne

Soit \(T_1\) et \(T_2\) deux tables/entités. La jointure interne de \(T_1\) et \(T_2\) sur un champ/attribut donné \(A\), est une table formée en ne conservant que les enregistrements de \(T_1\) et de \(T_2\) vérifiant la condition: \(T1.A = T2.A\) (égalité des champs \(A\) de T1 et de T2).

Nota

On la note \(T_1 \Join T_2\) ou quelquefois \(T_1 \underset{A} \Join T_2\) , pour être plus précis.

En Pratique

La jointure interne renvoie les enregistrements/lignes de la table de gauche (table1) pour lesquels il existe au moins un enregistrement/ligne dans la table de droite (table2) correspondant à la condition d'égalité du champ \(A\).
⚠ Aucune ligne du résultat d'une jointure interne ne contient donc de NULL.

On peut schématiser cette jointure par le schéma suivant:

INNER JOIN

INNER JOIN - JOINTURE INTERNE

Jointure Interne de deux Tables sur un champ/attribut donné

On dispose des tables \(T_1\) et \(T_2\) suivantes :

Col

\(T_1\) : utilisateur
id id_ville nom prenom
\(1\) \(3\) Dupont Gaelle
\(2\) \(4\) Dutronc Jacques
\(3\) \(1\) Dupond Jean
\(4\) \(3\) Durand Laura
\(5\) \(1\) Dufour Sarah
\(6\) \(1\) Dumiel Paul
\(7\) \(3\) Durmont Karl

Col

\(\underset{id\_ville} \Join\)

Col

\(T_2\) : ville
id nom_ville
\(1\) Marseille
\(2\) Toulouse
\(3\) Bordeaux

Col

\(=\)

Col

Jointure Interne de \(T_1\) et \(T_2\) sur 'id_ville'
id id_ville nom prenom id_ville nom_ville
\(1\) \(3\) Dupont Gaelle \(3\) Bordeaux
\(3\) \(1\) Dupond Jean \(1\) Marseille
\(4\) \(3\) Durand Laura \(3\) Bordeaux
\(5\) \(1\) Dufour Sarah \(1\) Marseille
\(6\) \(1\) Dumiel Paul \(1\) Marseille
\(7\) \(3\) Durmont Karl \(3\) Bordeaux

Jointure Interne de \(T_1\) et \(T_2\) sur 'id_ville'

Jointure Externe Gauche⚓︎

Jointure Externe Gauche de T1 et T2 sur un attribut A

Soit \(T_1\) et \(T_2\) deux tables/entités. La jointure externe gauche de \(T_1\) avec \(T_2\) sur un champ/attribut donné \(A\) est une table unissant :

  • les enregistrements de \(T_1\) et de \(T_2\) ayant la même valeur commune de \(A\) (comme pour une jointure interne), et aussi
  • les enregistrements de la table gauche \(T_1\) pour lesquels la valeur de l'attribut \(A\) ne correspond avec aucune valeur de l'attribut \(A\) de \(T_2\)

En Pratique

La Jointure Externe Gauche, ou LEFT JOIN, ou LEFT OUTER JOIN, permet de renvoyer tous les enregistrements/lignes de la table de gauche (table1), même s’ils n’ont pas de correspondance dans la table de droite (table2). ⚠ Dans une jointure (externe) gauche, les lignes de la table de droite sans correspondance vaudront toutes NULL.

Nota

On la note \(T_1 \leftouterjoin T_2\) (to solve ...)

On peut schématiser cette jointure par le schéma suivant:

LEFT JOIN

LEFT (OUTER) JOIN - JOINTURE (EXTERNE) GAUCHE

Jointure Externe Gauche de deux Tables sur un champ/attribut donné

On dispose des tables \(T_1\) et \(T_2\) suivantes :

Col

\(T_1\) : utilisateur
id id_ville nom prenom
\(1\) \(3\) Dupont Gaelle
\(2\) \(4\) Dutronc Jacques
\(3\) \(1\) Dupond Jean
\(4\) \(3\) Durand Laura
\(5\) \(1\) Dufour Sarah
\(6\) \(1\) Dumiel Paul
\(7\) \(3\) Durmont Karl

Col

\(T_2\) : ville
id nom_ville
\(1\) Marseille
\(2\) Toulouse
\(3\) Bordeaux

Col

\(=\)

Col

Jointure Externe Gauche de \(T_1\) et \(T_2\) sur 'id_ville'
id id_ville nom prenom id_ville nom_ville
\(1\) \(3\) Dupont Gaelle \(3\) Bordeaux
\(2\) \(4\) Dutronc Jacques NULL NULL
\(3\) \(1\) Dupond Jean \(1\) Marseille
\(4\) \(3\) Durand Laura \(3\) Bordeaux
\(5\) \(1\) Dufour Sarah \(1\) Marseille
\(6\) \(1\) Dumiel Paul \(1\) Marseille
\(7\) \(3\) Durmont Karl \(3\) Bordeaux

Jointure Externe Gauche de \(T_1\) et \(T_2\) sur 'id_ville'

Jointure Externe Droite⚓︎

Jointure Externe Droite de T1 et T2 sur un attribut A

Soit \(T_1\) et \(T_2\) deux tables/entités. La jointure externe droite de \(T_1\) avec \(T_2\) sur un champ/attribut donné \(A\) est une table unissant :

  • les enregistrements de \(T_1\) et de \(T_2\) ayant la même valeur commune de \(A\) (comme pour une jointure interne), et aussi
  • les enregistrements de la table droite \(T_2\) pour lesquels la valeur de l'attribut \(A\) ne correspond avec aucune valeur de l'attribut \(A\) de \(T_1\)

En Pratique

La Jointure Externe Droite, ou RIGHT JOIN, ou RIGHT OUTER JOIN, permet de renvoyer tous les enregistrements/lignes de la table de droite (table2), même s’il n’y a pas de correspondance dans la table de gauche (table1). ⚠ Dans une jointure (externe) droite, les lignes de la table de gauche sans correspondance vaudront toutes NULL.

Nota

On la note \(T_1 \rightouterjoin T_2\) (to solve ...)

On peut schématiser cette jointure par le schéma suivant:

RIGHT JOIN

RIGHT (OUTER) JOIN - JOINTURE (EXTERNE) DROITE

Jointure Externe Droite de deux Tables sur un champ/attribut donné

On dispose des tables \(T_1\) et \(T_2\) suivantes :

Col

\(T_1\) : utilisateur
id id_ville nom prenom
\(1\) \(3\) Dupont Gaelle
\(2\) \(4\) Dutronc Jacques
\(3\) \(1\) Dupond Jean
\(4\) \(3\) Durand Laura
\(5\) \(1\) Dufour Sarah
\(6\) \(1\) Dumiel Paul
\(7\) \(3\) Durmont Karl

Col

\(T_2\) : ville
id nom_ville
\(1\) Marseille
\(2\) Toulouse
\(3\) Bordeaux

Col

\(=\)

Col

Jointure Externe Droite de \(T_1\) et \(T_2\) sur 'id_ville'
id id_ville nom prenom id_ville nom_ville
\(1\) \(3\) Dupont Gaelle \(3\) Bordeaux
NULL NULL NULL NULL \(2\) Toulouse
\(3\) \(1\) Dupond Jean \(1\) Marseille
\(4\) \(3\) Durand Laura \(3\) Bordeaux
\(5\) \(1\) Dufour Sarah \(1\) Marseille
\(6\) \(1\) Dumiel Paul \(1\) Marseille
\(7\) \(3\) Durmont Karl \(3\) Bordeaux

Jointure Externe Droite de \(T_1\) et \(T_2\) sur 'id_ville'

Références⚓︎