Différences
Ci-dessous, les différences entre deux révisions de la page.
| 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:52] – edauce | public: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' | ||
| + | * 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 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 = \{t \cup q : t \in r, q \in 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' | ||
| + | |||
| + | <note important> | ||
| + | **Jointure** | ||
| + | * Soient r et s (de schémas R et S), avec R ⋂ S ≠ Ø | ||
| + | * La **jointure** | ||
| + | $$r ⋈ s = \{t \cup q : t∈ r, q∈ s, t(R \cap S) = q(R \cap S)\}$$ | ||
| + | </ | ||
| + | |||
| + | <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$| | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | **Exemples de requêtes ** | ||
| + | |||
| + | |||
| + | |||
| + | * “//Donner la liste des PIB/hab des pays exportateurs de pétrole// | ||
| + | $$Π_\text{PIB/ | ||
| + | |||
| + | < | ||
| + | **Schéma de base relationnelle** : | ||
| + | |||
| + | * **Clients** ( __nom_client__, | ||
| + | * **Commandes** ( __num_Commande__, | ||
| + | * **Fournisseurs** ( __nom_fournisseur__, | ||
| + | * **Catalogue** ( __nom_fournisseur, | ||
| + | </ | ||
| + | |||
| + | * “//Donner le nom et l' | ||
| + | $$Π_\text{nom_client, | ||
| + | |||
| + | |||
| + | ====Requêtes multi-tables en SQL==== | ||
| + | |||
| + | <code sql> | ||
| + | SELECT | ||
| + | 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 | ||
| + | </ | ||
| + | |||
| + | Pour exprimer la jointure sur l’attribut ' | ||
| + | |||
| + | **Exemples :** | ||
| + | |||
| + | <code sql> | ||
| + | SELECT PIB_par_hab | ||
| + | FROM Pays NATURAL JOIN Exportations | ||
| + | WHERE nom_matiere = ' | ||
| + | </ | ||
| + | |||
| + | <code sql> | ||
| + | SELECT PIB_par_hab | ||
| + | FROM Pays, Exportations | ||
| + | WHERE nom_matiere = ' | ||
| + | AND Pays.nom_pays = Exportations.nom_pays | ||
| + | </ | ||
| + | |||
| + | <code sql> | ||
| + | SELECT PIB_par_hab | ||
| + | FROM Pays | ||
| + | WHERE nom_pays IN ( | ||
| + | select | ||
| + | FROM Exportations | ||
| + | WHERE nom_matiere = ' | ||
| + | ) | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ==== Division==== | ||
| + | <note important> | ||
| + | * 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 \cup q ∈ r\}$$ | ||
| + | |||
| + | → on cherche les éléments de t qui “correspondent” à s | ||
| + | </ | ||
| + | |||
| + | {{public: | ||
| + | |||
| + | |||
| + | |||
| + | __Previous__ : [[public: | ||
| + | __Up__ : [[public: | ||
| + | __Next__ : [[public: | ||