public:std-3:cm2:interrogation_des_bases_de_donnees:3.2.2_operateurs_multi-tables

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
public:std-3:cm2:interrogation_des_bases_de_donnees:3.2.2_operateurs_multi-tables [2016/10/03 12:54] edaucepublic:std-3:cm2:interrogation_des_bases_de_donnees:3.2.2_operateurs_multi-tables [2018/01/17 13:26] (Version actuelle) edauce
Ligne 1: Ligne 1:
 +===== 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 : ⋈ ====
 +
 +<note important>
 +**Union de deux éléments :**
 +  * 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 
 +</note>
 +
 +<note important>
 +**Produit cartésien **
 +  * 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={tq:tr,qs}
 +</note>
 +
 +  * 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.
 +
 +<note important>
 +**Jointure**
 +  * 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.
 +rs={tq:tr,qs,t(RS)=q(RS)}
 +</note>
 +
 +<note tip> 
 +**Exemple**
 +
 +
 +**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$|
 +
 +</note>
 +
 +
 +**Exemples de requêtes **
 +
 +
 +
 +  * “//Donner la liste des PIB/hab des pays exportateurs de pétrole//” : 
 +ΠPIB/hab(σnom_matière = pétrole(PaysExportations))
 +
 +<note>
 +**Schéma de base relationnelle** :
 +
 +  * **Clients** ( __nom_client__, adresse_client, solde)
 +  * **Commandes** ( __num_Commande__, __n__o__m__ __c__l__i__e__n__t, __n__o__m__ __f__o__u__r__n__i__s__s__e__u__r__, __c__o__m__p__o__s__a__n__t__, quantité, montant)
 +  * **Fournisseurs** ( __nom_fournisseur__, adresse_fournisseur)
 +  * **Catalogue** ( __nom_fournisseur, composant__, prix )
 +</note>
 +
 +  * “//Donner le nom et l'adresse des clients qui ont commandé des micro controleurs//” :
 +Πnom_client,adresse_client(σcomposant = 'micro-controller'(ClientCommandes))
 +
 +
 +====Requêtes multi-tables en SQL====
 +
 +<code 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)
 +</code>
 +
 +Pour exprimer la jointure sur l’attribut 'Aj' commun aux tables 'R1' et 'R2', on écrira : 'R1.Aj = R2.Aj'
 +
 +**Exemples :**
 +
 +<code sql>
 +SELECT PIB_par_hab 
 +FROM Pays NATURAL JOIN Exportations
 +WHERE nom_matiere = 'petrole'
 +</code>
 +
 +<code sql>
 +SELECT PIB_par_hab 
 +FROM Pays, Exportations
 +WHERE nom_matiere = 'petrole'
 +AND Pays.nom_pays = Exportations.nom_pays
 +</code>
 +
 +<code sql>
 +SELECT PIB_par_hab 
 +FROM Pays
 +WHERE nom_pays IN (
 +  select  nom_pays 
 +  FROM Exportations
 +  WHERE nom_matiere = 'petrole'
 +  )
 +</code>
 +
 +
 +
 +==== Division====
 +<note important> **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|qs,tqr}
 +
 +→ on cherche les éléments de t qui “correspondent” à s
 +</note>
 +
 +{{public:std-3:cm2:conception_de_bases_de_donnees:3.1.1_modele_ensembliste:s7-cm-17.png}}
 +
 +
 +
 +__Previous__ : [[public:STD-3:CM2:Interrogation des bases de données:3.2.1 Opérateurs mono-table]]
 +__Up__ : [[public:STD-3:CM2:Interrogation des bases de données]]
 +__Next__ : [[public:STD-3:CM2:Interrogation des bases de données:3.2.3 Recherches composées]]