3.2.2 Opérateurs multi-tables
Principe : recoupement d'informations présentes dans plusieurs tables :
- Croisement des critères de sélection : Jointure
- Recherche ciblée : Division
Jointure : ⋈
- Soient les relations r et s de schémas R et S.
- On note R ⋂ S la liste des attributs communs aux deux schémas et R ⋃ S la liste des attributs appartenant à R ou à S.
- soit t ∈ r et q ∈ s tels que t(R ⋂ S) = q(R ⋂ S)
On note t ⋃ q le tuple formé des valeurs de t et de q étendues au schéma R ⋃ S
- Soient r et s (de schémas R et S), avec R ⋂ S = Ø
Le produit cartésien r × s est une nouvelle table de schéma R ⋃ S combinant les tuples de r et de s de toutes les façons possibles : r×s={t∪q:t∈r,q∈s}
- La jointure est une opération qui consiste à effectuer un produit cartésien des tuples de deux relations pour lesquelles certaines valeurs correspondent.
- Le résultat de l'opération est une nouvelle relation.
- Soient r et s (de schémas R et S), avec R ⋂ S ≠ Ø
- La jointure r ⋈ s est une nouvelle table de schéma R ⋃ S combinant les tuples de r et de s ayant des valeurs communes pour les attributs communs.
r⋈s={t∪q:t∈r,q∈s,t(R∩S)=q(R∩S)}
Matière_première :
nom_matière | unité | prix |
---|---|---|
pétrole | baril | 45$ |
gaz | GJ | 3$ |
uranium | lb | 12$ |
Exportations :
nom_pays | nom_matière | quantité |
---|---|---|
Algérie | pétrole | 180.000 |
Algérie | gaz | 20.000 |
Niger | uranium | 30.000 |
Arabie Saoudite | pétrole | 2.000.000 |
Arabie Saoudite | gaz | 750.000 |
Matière_première ⋈ Exportations :
nom_pays | nom_matière | quantité | unité | prix |
---|---|---|---|---|
Algérie | pétrole | 180.000 | baril | 45$ |
Algérie | gaz | 20.000 | GJ | 3$ |
Niger | uranium | 30.000 | lb | 12$ |
Arabie Saoudite | pétrole | 2.000.000 | baril | 45$ |
Arabie Saoudite | gaz | 750.000 | GJ | 3$ |
Exemples de requêtes
- “Donner la liste des PIB/hab des pays exportateurs de pétrole” :
ΠPIB/hab(σnom_matière = pétrole(Pays⋈Exportations))
- Clients ( nom_client, adresse_client, solde)
- Commandes ( num_Commande, nom client, nom fournisseur, composant, quantité, montant)
- Fournisseurs ( nom_fournisseur, adresse_fournisseur)
- Catalogue ( nom_fournisseur, composant, prix )
- “Donner le nom et l'adresse des clients qui ont commandé des micro controleurs” :
Πnom_client,adresse_client(σcomposant = 'micro-controller'(Client⋈Commandes))
Requêtes multi-tables en SQL
SELECT A1,A2, …, An // liste d’attributs FROM R1, …, Rm // liste de TABLES WHERE F1 AND … AND Fl // liste de conditions sur les attributs // (en particulier conditions sur les attributs // sur lesquel s’effectue la jointure)
Pour exprimer la jointure sur l’attribut 'Aj' commun aux tables 'R1' et 'R2', on écrira : 'R1.Aj = R2.Aj'
Exemples :
SELECT PIB_par_hab FROM Pays NATURAL JOIN Exportations WHERE nom_matiere = 'petrole'
SELECT PIB_par_hab FROM Pays, Exportations WHERE nom_matiere = 'petrole' AND Pays.nom_pays = Exportations.nom_pays
SELECT PIB_par_hab FROM Pays WHERE nom_pays IN ( SELECT nom_pays FROM Exportations WHERE nom_matiere = 'petrole' )
Division
- Soient r (de schémas R) et s (de schémas S), avec S ⊆ R :
La division r ÷ s est la relation (table) u de schéma R-S maximale contenant des tuples tels que u × s ⊆ r (avec × représentant le produit cartésien)
r÷s={t|∀q∈s,t∪q∈r}
→ on cherche les éléments de t qui “correspondent” à s
Previous : 3.2.1 Opérateurs mono-table Up : Interrogation des bases de données Next : 3.2.3 Recherches composées