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 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 \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 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 \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 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 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
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
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 |
Projection \(\pi\)⚓︎
Projection
Soit \(T_1\) une table/entité d'une base de données.
La
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
Nota
On la note
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:
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
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
- 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 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:
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
- 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 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:
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⚓︎
- Algèbre Relationnelle : Cours Algèbre Relationnelle, Université de Nice