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 | ||
| tc_info:cm6 [2018/12/12 14:05] – [7.2 Traduction vers le modèle relationnel] edauce | tc_info:cm6 [2024/06/28 15:18] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | ===== 7 - Bases de données relationnelles ===== | ||
| + | |||
| + | <note tip> | ||
| + | Pour leur conception, les bases de données sont ici vues comme des ensembles constitués de plusieurs populations d' | ||
| + | </ | ||
| + | |||
| + | ==== 7.1 Modèle ensembliste ==== | ||
| + | |||
| + | Une base de donnée est constituée de plusieurs ensembles d' | ||
| + | |||
| + | __Exemple 1 :__ | ||
| + | * Ensembles d' | ||
| + | * Ensembles de commandes | ||
| + | * Ensembles d' | ||
| + | * Ensembles de clients | ||
| + | |||
| + | __Exemple 2 :__ | ||
| + | * Ensembles d' | ||
| + | * Ensembles de séances | ||
| + | * Ensembles de cours | ||
| + | * Ensembles de copies | ||
| + | |||
| + | On parle plus généralement d' | ||
| + | |||
| + | <note tip> | ||
| + | ** Le modèle entité/ | ||
| + | |||
| + | Le modèle entité/ | ||
| + | |||
| + | Le modèle entités/ | ||
| + | |||
| + | </ | ||
| + | |||
| + | === Définitions === | ||
| + | |||
| + | Modéliser une base de données, c'est : | ||
| + | * Identifier les différents ensembles en interaction | ||
| + | * Identifier les liens de dépendance entre les différents ensembles | ||
| + | |||
| + | < | ||
| + | {{public: | ||
| + | </ | ||
| + | < | ||
| + | {{public: | ||
| + | </ | ||
| + | < | ||
| + | {{public: | ||
| + | </ | ||
| + | <note tip> | ||
| + | Les liens entre les différents ensembles sont appelés des **associations** | ||
| + | </ | ||
| + | |||
| + | === Association === | ||
| + | |||
| + | <note important> | ||
| + | Une association exprime des relations de dépendance entre deux ou plusieurs ensembles d’entités. | ||
| + | |||
| + | **Définition** : Une **association** entre les ensembles $E_1$, ..., $E_k$ est un sous-ensemble du produit $E_1 \times ... \times E_k$. | ||
| + | |||
| + | Il s'agit donc d'un ensemble de k-uplets $\{..., (t_1, | ||
| + | |||
| + | où $k$ est le degré de l' | ||
| + | * k=2 : association binaire | ||
| + | * k=3 : association ternaire | ||
| + | * etc… | ||
| + | |||
| + | </ | ||
| + | |||
| + | === Rôles des associations === | ||
| + | * // | ||
| + | * // | ||
| + | * // | ||
| + | * // | ||
| + | * ... | ||
| + | |||
| + | |||
| + | === Contraintes de cardinalité === | ||
| + | |||
| + | <note tip> | ||
| + | Pour chaque ensemble participant à une association, | ||
| + | |||
| + | On donne en général un intervalle $[b_\text{inf}, | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | === Représentation graphique === | ||
| + | |||
| + | **Associations binaires** | ||
| + | |||
| + | |{{public: | ||
| + | |{{public: | ||
| + | |{{public: | ||
| + | |||
| + | **Associations ternaires** | ||
| + | |||
| + | | {{public: | ||
| + | |||
| + | |||
| + | === Types d' | ||
| + | |||
| + | **Associations de 1 à plusieurs (fonctionnelle)** | ||
| + | |||
| + | Relation non symétrique entre les deux ensembles : […,1] d'un côté, […,N] de l' | ||
| + | Relation de type contenant/ | ||
| + | Il s'agit du type d' | ||
| + | |||
| + | <note tip> | ||
| + | On dit parfois que l’ensemble dont la participation est unique est dit “à gauche” de l’association fonctionnelle, | ||
| + | |||
| + | “à gauche” → “à droite” | ||
| + | </ | ||
| + | |||
| + | |{{public: | ||
| + | |{{public: | ||
| + | |||
| + | **Associations de plusieurs à plusieurs (croisée)** | ||
| + | |||
| + | Dans une association “croisée”, | ||
| + | |||
| + | |{{public: | ||
| + | |{{public: | ||
| + | |||
| + | === Modèles Entité Associations valués === | ||
| + | |||
| + | <note important> | ||
| + | Dans le cadre du modèle entité/ | ||
| + | * les attributs des ensembles d' | ||
| + | * Soit $A$ un attribut de l' | ||
| + | $$ A : \mathcal{E} \rightarrow D(A) $$ | ||
| + | * les attributs des associations sont des // | ||
| + | * Soit $B$ un attribut de l' | ||
| + | $$ B : \mathcal{E}\times \mathcal{F}\rightarrow D(B) $$ | ||
| + | </ | ||
| + | |||
| + | ** Mesures ** | ||
| + | * Plusieurs mesures peuvent être opérées sur les objets d'un ensemble. Chaque mesure est un attribut | ||
| + | * Le schéma de l' | ||
| + | * Les éléments de l' | ||
| + | * Une //clé// est un jeu de mesures //minimal// (permettant de distinguer les objets) appartenant au schéma | ||
| + | |||
| + | <note tip> **TODO** | ||
| + | |||
| + | Ensembles discernables / non discernables | ||
| + | </ | ||
| + | ** Opérateurs ** | ||
| + | * On s’intéresse ici aux associations qui représentent une “opération” (inscription, | ||
| + | * Lors d’une mise à jour de la base, certains événements tels que l’emprunt ou le retour d’un ouvrage, l’affectation d’un employé à un poste, | ||
| + | * Il est possible de garder une trace des événements passés en mettant un (ou plusieurs) attributs sur une association. | ||
| + | * Ainsi, certaines associations peuvent être " | ||
| + | * avoir lieu à une date | ||
| + | * ou prendre place sur une durée précise (prêt, | ||
| + | * On peut ainsi mémoriser : | ||
| + | * " | ||
| + | * " | ||
| + | |||
| + | |||
| + | |||
| + | <note tip> | ||
| + | **Exemple** | ||
| + | " | ||
| + | |{{public: | ||
| + | </ | ||
| + | |||
| + | <note tip> | ||
| + | **Exemple** | ||
| + | * Chaque coureur est décrit par ses nom, prénom, nationalité et numéro de maillot. | ||
| + | * Chaque coureur appartient à une équipe qui possède un numéro, un sponsor associé. | ||
| + | * Chaque coureur participe à une ou plusieurs étapes. Une étape se caractérise par son numéro, son type (contre la montre/ | ||
| + | * A chaque étape est associée un classement d' | ||
| + | |||
| + | |{{public: | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== 7.2 Traduction vers le modèle relationnel ==== | ||
| + | |||
| + | Il est possible de traduire un modèle entité/ | ||
| + | |||
| + | <note tip> | ||
| + | Lors de la réalisation d'une base de données, on passe en général par les étapes suivantes: | ||
| + | - Conception de la base sous forme d'un modèle entité/ | ||
| + | - Traduction sous la forme d'un modèle relationnel. | ||
| + | - Normalisation (voir [[https:// | ||
| + | - Mise en œuvre informatique. | ||
| + | </ | ||
| + | |||
| + | Un petit nombre de règles permettent de traduire un modèle entité/ | ||
| + | * Selon ces règles, à la fois les ensembles d' | ||
| + | * Les liaisons et dépendances entre schémas de relation sont assurés par la définition des **clés étrangères** (attributs communs à plusieurs tables). | ||
| + | |||
| + | === Schéma de base et clé étrangère === | ||
| + | |||
| + | <note important> | ||
| + | * Un schéma (ou modèle) de bases de données est un ensemble fini de schémas de relation. | ||
| + | * Une base de données est un ensemble fini de relations. | ||
| + | * Les liens et associations entre relations entre s’expriment sous la forme de **clés étrangères** | ||
| + | </ | ||
| + | |||
| + | <note tip> | ||
| + | **Définition** | ||
| + | |||
| + | * Au sein d'un schéma relationnel $R$, Une clé étrangère est un attribut (ou un groupe d' | ||
| + | * La présence d'une clé étrangère au sein d'une relation $r$ de schéma $R$ introduit une contrainte d' | ||
| + | * la valeur des attributs de la clé étrangère d'un tuple de $r$ doit être trouvée dans la table s correspondante. | ||
| + | * On indique la présence d'une clé étrangère à l'aide de pointillés : {…, __C__l__é__ __é__t__r__a__n__g__è__r__e__, | ||
| + | </ | ||
| + | |||
| + | |||
| + | **Exemple ** | ||
| + | < | ||
| + | **Schéma de base relationnelle** : | ||
| + | |||
| + | * **Clients** ( __nom_client__, | ||
| + | * **Commandes** ( __num_Commande__, | ||
| + | * **Fournisseurs** ( __nom_fournisseur__, | ||
| + | * **Catalogue** ( __nom_fournisseur, | ||
| + | </ | ||
| + | |||
| + | === Traduction des associations de plusieurs à plusieurs === | ||
| + | |||
| + | Une association croisée ne contient que des contraintes de cardinalité de type [..,N]. Soit $R$ une telle association et $E_1$, ..., $E_k$ les ensembles participant à l' | ||
| + | |||
| + | <note important> | ||
| + | **Règle de traduction :** | ||
| + | * Chaque ensemble $E_i$ est traduit par un schéma relationnel (contenant les mêmes attributs) | ||
| + | * L' | ||
| + | * les clés primaires des ensembles participant à l’association | ||
| + | * (éventuellement) les attributs propres à l' | ||
| + | </ | ||
| + | |||
| + | <note tip> | ||
| + | {{public: | ||
| + | |||
| + | ** Traduction :** | ||
| + | * **Pays** (__nom_pays__, | ||
| + | * **Matière_première** ( __nom_matière__, | ||
| + | * **Exportation** (__n__o__m__ __p__a__y__s, | ||
| + | |||
| + | </ | ||
| + | |||
| + | <note tip> | ||
| + | {{public: | ||
| + | **Traduction** : | ||
| + | * **Appareil** (__code_appareil__, | ||
| + | * **Séance** (__date, heure, local__) | ||
| + | * **Réservation** (__c__o__d__e __a__p__p__a__r__e__i__l, | ||
| + | |||
| + | </ | ||
| + | |||
| + | === Traduction des associations de un à plusieurs === | ||
| + | |||
| + | Soit une association fonctionnelle $R$. On suppose qu'il existe au moins un ensemble $A$ de cardinalité unique [1,1] participant l’association. | ||
| + | |||
| + | <note important> | ||
| + | **Règle de traduction** | ||
| + | * Chaque ensemble participant est traduit sous forme de schéma relationnel | ||
| + | * L' | ||
| + | </ | ||
| + | |||
| + | <note tip> | ||
| + | **Exemple** : | ||
| + | {{public: | ||
| + | </ | ||
| + | |||
| + | <note tip> | ||
| + | **Remarque** : lorsque l’association est valuée, les attributs de l’association sont également injectés dans la table représentant l’ensemble de gauche. | ||
| + | {{public: | ||
| + | </ | ||
| + | |||
| + | <note tip> | ||
| + | **Exemple** | ||
| + | {{public: | ||
| + | **Traduction** : | ||
| + | * **Groupe_TD**( __num_groupe__, | ||
| + | * **Entreprise** ( __nom_entreprise__, | ||
| + | * **Etudiant** ( __num_etudiant__, | ||
| + | </ | ||
| + | |||
| + | === Exemple complet === | ||
| + | |||
| + | < | ||
| + | **Schéma de base relationnelle** : | ||
| + | |||
| + | * **Clients** ( __nom_client__, | ||
| + | * **Commandes** ( __num_Commande__, | ||
| + | * **Fournisseurs** ( __nom_fournisseur__, | ||
| + | * **Catalogue** ( __nom_fournisseur, | ||
| + | </ | ||
| + | < | ||
| + | ** Réalisation ** : | ||
| + | |||
| + | **Clients** : | ||
| + | ^__nom_client__^adresse_client^solde^ | ||
| + | |Durand|7, rue des Lilas|335, | ||
| + | |Dubois|44, av. du Maréchal Louis|744, | ||
| + | |Duval|5, place du marché|33, | ||
| + | |||
| + | **Commandes** : | ||
| + | ^__num_Commande__^ __n__o__m__ __c__l__i__e__n__t^ composant^ quantité^ | ||
| + | |6674|Dubois|micro controller|55| | ||
| + | |6637|Dubois|radio tuner|2| | ||
| + | |6524|Durand|transistor|4| | ||
| + | |6443|Duval|micro controller|7| | ||
| + | |||
| + | **Fournisseurs** : | ||
| + | ^__nom_fournisseur__^ adresse_fournisseur^ | ||
| + | |Sage|33, College street, London| | ||
| + | |MoxCom|77 Ashley square, | ||
| + | |||
| + | **Catalogue** : | ||
| + | ^__nom_fournisseur__^ __composant__^ prix^ | ||
| + | |Sage|transistor|4, | ||
| + | |MoxCom|micro controller|3, | ||
| + | |MoxCom|radio tuner|7,0| | ||
| + | </ | ||
| + | |||
| + | === SQL === | ||
| + | < | ||
| + | Exemple de définition de table avec clé étrangère en SQL : | ||
| + | <code sql> | ||
| + | CREATE TABLE Commande ( | ||
| + | num_commande INTEGER NOT NULL, | ||
| + | nom_client VARCHAR(30), | ||
| + | nom_fournisseur VARCHAR(30), | ||
| + | composant VARCHAR(30), | ||
| + | quantité INTEGER, | ||
| + | montant DECIMAL(12, | ||
| + | PRIMARY KEY (num_commande), | ||
| + | FOREIGN KEY (nom_client) REFERENCES Client, | ||
| + | FOREIGN KEY (nom_fournisseur, | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== 7.3 Interrogation des Bases de Données ==== | ||
| + | |||
| + | Interroger une base de données , c’est sélectionner certaines données parmi l' | ||
| + | |||
| + | Exemples : | ||
| + | * Donner la liste des pays exportateurs de pétrole | ||
| + | * Liste des musiciens jouant à la fois du piano et du violon | ||
| + | * Liste des artistes français disque d'or en 1977 | ||
| + | * Liste des suspects châtain taille moyenne présents à Poitiers la nuit du 12 au 13 février | ||
| + | |||
| + | C’est également croiser et recouper les informations présentes dans des bases | ||
| + | * pour faire ressortir des corrélations (exemple : type d' | ||
| + | * pour des enquêtes de consommation, | ||
| + | |||
| + | C’est enfin personnaliser l' | ||
| + | * Emploi du temps de l' | ||
| + | * Factures impayées du client Z | ||
| + | |||
| + | <note important> | ||
| + | L’**algèbre relationnelle** | ||
| + | * propose un certain nombre d’opérations ensemblistes : | ||
| + | * Intersection, | ||
| + | * Union, | ||
| + | * Projection, | ||
| + | * Différence, | ||
| + | * … | ||
| + | * qui, à partir d'un ensemble de relations, permettent de construire de nouvelles relations. | ||
| + | * La relation nouvellement construite contient le résultat de la **requête** | ||
| + | </ | ||
| + | |||
| + | ==== 7.4 Opérateurs mono-table==== | ||
| + | |||
| + | Extraction d' | ||
| + | * projection $\pi$ = extraction de colonnes | ||
| + | * sélection $\sigma$ = extraction de lignes | ||
| + | |||
| + | === 7.4.1 Projection : π === | ||
| + | < | ||
| + | * Soit $r$ une relation de schéma $R$. | ||
| + | * Soit $S$ un ensemble d' | ||
| + | La **projection** | ||
| + | $$\pi_S(r) = \{t(S)|t \in R\}$$ | ||
| + | |||
| + | (avec $t(S)$ la restriction de $t$ au schéma $S$) | ||
| + | </ | ||
| + | |||
| + | <note tip> **Exemple** | ||
| + | **Catalogue** : | ||
| + | ^nom_fournisseur^adresse_fournisseur^composant^ prix^ | ||
| + | |Sage|33, College street, London|transistor|4, | ||
| + | |MoxCom|77 Ashley square, | ||
| + | |MoxCom|77 Ashley square, | ||
| + | |||
| + | Requete : //Donner la liste des fournisseurs (avec leur adresse)//: | ||
| + | $$u = \pi_\text{nom_fournisseur, | ||
| + | |||
| + | $\rightarrow$ **u** : | ||
| + | ^nom_fournisseur^adresse_fournisseur^ | ||
| + | |Sage|33, College street, London| | ||
| + | |MoxCom|77 Ashley square, | ||
| + | |||
| + | </ | ||
| + | |||
| + | === 7.4.2 Sélection : σ === | ||
| + | |||
| + | <note important> | ||
| + | **Condition sur R** | ||
| + | * On considère le schéma $R (A_1, …, A_n)$ | ||
| + | * Une condition $F$ sur $R$ : | ||
| + | * est un ensemble de contraintes sur les valeurs des attributs $A_1$, …, $A_n$ | ||
| + | * construites à l'aide d' | ||
| + | * ∧(et), | ||
| + | * ∨(ou), | ||
| + | * ¬(non), | ||
| + | * =, ≠, >,<, ≥ ,≤, ... | ||
| + | * et de valeurs numériques ou de texte. | ||
| + | </ | ||
| + | |||
| + | <note tip> | ||
| + | **Exemples** : | ||
| + | $$ F | ||
| + | $$ F | ||
| + | </ | ||
| + | |||
| + | <note important> | ||
| + | **Sélection** | ||
| + | * Soit $r$ une relation de schéma $R$ | ||
| + | * Soit $F$ une condition sur $R$ | ||
| + | |||
| + | La **sélection** $σ_F(r)$ est une nouvelle relation de schéma $R$ , constituée de l' | ||
| + | |||
| + | $$σ_F(r) = \{ t ∈ r | F( t ) \text{est vrai} \}$$ | ||
| + | </ | ||
| + | |||
| + | <note tip> | ||
| + | **Exemple** : | ||
| + | |||
| + | Requête : //Donner la liste des fournisseurs qui vendent des micro-controleurs// | ||
| + | |||
| + | $$u = Π_\text{nom_fournisseur}( σ_\text{Composant = micro controller} ( \text{Fournisseur} ))$$ | ||
| + | **u** : | ||
| + | ^nom_f^ | ||
| + | |Moxcom| | ||
| + | </ | ||
| + | |||
| + | <note tip> | ||
| + | **Exemple** | ||
| + | |||
| + | **Pays** : | ||
| + | ^nom_pays^superficie^population ^PIB/hab^ | ||
| + | |Algérie|2.300.000|31.300.000|1630$| | ||
| + | |Niger|1.200.000|11.400.000|890$| | ||
| + | |Arabie Saoudite|2.150.000|24.300.000|8110$| | ||
| + | |||
| + | Requête : //Donner la liste des pays dont le PIB/hab est > 1000$// | ||
| + | $$u = Π_\text{nom_pays}( σ_\text{PIB/ | ||
| + | |||
| + | **u** : | ||
| + | ^nom_pays^ | ||
| + | |Algérie| | ||
| + | |Arabie Saoudite| | ||
| + | |||
| + | |||
| + | </ | ||
| + | |||
| + | === 7.4.3 Structure d'une requête SQL=== | ||
| + | |||
| + | <code sql> | ||
| + | SELECT | ||
| + | FROM R // nom de la table | ||
| + | WHERE | ||
| + | </ | ||
| + | |||
| + | cette requête est semblable à : | ||
| + | * une sélection algébrique $σ_F$ | ||
| + | * suivie par une projection algébrique $Π_{A1, …, An}$ | ||
| + | soit : | ||
| + | $$Π_{A1, …, An}( σ_F ( R ))$$ | ||
| + | |||
| + | **Exemples :** | ||
| + | * //Qui fournit des transistors ?// | ||
| + | <code sql> | ||
| + | SELECT nom_fournisseur | ||
| + | FROM Fournisseur | ||
| + | WHERE composant = ’transistor’; | ||
| + | </ | ||
| + | * //Liste de toutes les commandes de transistors :// | ||
| + | <code sql> | ||
| + | SELECT * | ||
| + | FROM Commandes | ||
| + | WHERE composant = ’transistor’ | ||
| + | </ | ||
| + | * //Qui fournit des micro-controleurs à moins de 5$?// | ||
| + | <code sql> | ||
| + | SELECT nom_fournisseur | ||
| + | FROM Catalogue | ||
| + | WHERE composant = ’micro controller’ AND prix < 5 | ||
| + | </ | ||
| + | |||
| + | ==== 7.5 Opérateurs multi-tables ==== | ||
| + | |||
| + | Principe : recoupement d' | ||
| + | * Croisement des critères de sélection : **Jointure** | ||
| + | * Recherche ciblée : **Division** | ||
| + | |||
| + | === 7.5.1 La 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, | ||
| + | |||
| + | |||
| + | === 7.5.2 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 = ' | ||
| + | ) | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | === 7.5.3 La 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: | ||
| + | |||
| + | ==== 7.6 Recherches composées ==== | ||
| + | |||
| + | * Certaines requêtes, peuvent être le résultat de la combinaison de plusieurs critères de recherche | ||
| + | * La combinaison de résultats est généralement réalisée à l'aide des opérations ensemblistes classiques (intersection, | ||
| + | * Pour alléger les formules, il est possible | ||
| + | |||
| + | <note important> | ||
| + | **Union** | ||
| + | * Soient r1 et r2 deux tables de schéma R. | ||
| + | L' | ||
| + | $$r1 \cup r2 = { t ∈ r1} \cup { t ∈ r2}$$ | ||
| + | </ | ||
| + | |||
| + | <note important> | ||
| + | * Soient r1 et r2 deux tables de schéma R. | ||
| + | L' | ||
| + | $$r1 \cap r2 = \{ t ∈ r1\} \cap \{ t ∈ r2\}$$ | ||
| + | </ | ||
| + | |||
| + | <note important> | ||
| + | * Soient r1 et r2 deux tables de schéma R. | ||
| + | La **différence** r1 - r2 est une nouvelle table de schéma R constituée de l' | ||
| + | $$r1 - r2 = \{ t ∈ r1\} - \{ t ∈ r2\}$$ | ||
| + | </ | ||
| + | |||
| + | **Exemples :** | ||
| + | * Donner la liste des pays qui exportent à la fois du gaz et du pétrole : | ||
| + | $$\pi _{Pays} σ_\text{matière = gaz} (\text{Exportations}) \cap \pi _{Pays} | ||
| + | en SQL : | ||
| + | <code sql> | ||
| + | SELECT pays FROM Exportations | ||
| + | WHERE matière = ' | ||
| + | INTERSECT ( | ||
| + | WHERE matière = ' | ||
| + | </ | ||
| + | * Donner la liste des pays qui exportent du gaz mais pas du pétrole : | ||
| + | $$\pi _{Pays} σ_\text{matière = gaz} (\text{Exportations}) - \pi _{Pays} σ_\text{matière = pétrole} (\text{Exportations})$$ | ||
| + | en SQL : | ||
| + | <code sql> | ||
| + | SELECT pays FROM Exportations | ||
| + | WHERE matière = ' | ||
| + | EXCEPT ( | ||
| + | WHERE matière = ' | ||
| + | </ | ||
| + | |||
| + | * Donner la liste des clients qui commandent uniquement des produits ' | ||
| + | $$\pi_{nom\_client}Client - \pi_{nom\_client} \sigma_{fournisseur \neq ' | ||
| + | en SQL : | ||
| + | <code sql> | ||
| + | SELECT nom_client FROM Client | ||
| + | EXCEPT ( SELECT client FROM Client NATURAL JOIN Commande | ||
| + | WHERE fournisseur <> ' | ||
| + | </ | ||