Actualites | Forum |Archives
Le magazine des décideurs et webmasters qui gagnent !
Inscription | Livre d'or | Plan du site | 15 visiteurs actifs
   
A la Une
Actualité
Dossiers
Communiqués
Coin Technique
Agenda des salons
Emploi
Echange de liens

Archives
Sélection
Expérience qui parle
Internet quotidien
Tous les dossiers

Forum
Forum SAM-MAG

Guides
Check-list de la promotion des sites
Promouvoir et référencer les sites web

Contact
Nous contacter
Newsletter
La protection des données personnelles


 
  Utilisation des jointures dans les requêtes SQL (2ème partie)
Dossier "SAM l'Informaticien" du 13 au 26 novembre 2000 par Daniel Lucazeau

our faire le lien avec les articles de Stéphane Lambert, une jointure est l'action qui permet de retrouver les redondances que l'on a écartées dans la modèlisation et la conception de la base.

Quand on fait deux tables l'une pour les clients et l'autre pour ses factures, c'est afin de ne pas stocker les informations fixes du client sur chaque ligne de facture. Mais à l'édition, au sens large (papier, écran..), on a besoin de présenter toutes les factures d'un client. On effectue donc une jointure sur l'identifiant du client qui lui est présent dans les deux tables.

Prenons un exemple plus complexe.

Etudions une chaîne, «fournisseur», «produit», «colis» et «client». Voilà de façon sommaire le modèle de données:

Les tables qui s'en déduisent sont les suivantes :

Et pour savoir quels sont les fournisseurs qui ont livrés des produits à un client final on a la requête suivante :

SELECT Client.*, Fournisseur.*
FROM Client, Fournisseur, Colis, Produit, Compose
WHERE Fournisseur.idFournisseur = Produit.idFournisseur
AND Produit.idProduit = Compose.idProduit
AND Colis.idColis = Compose.idColis
AND Client.idClient = Colis.idClien
t

On a d'un seul coup d'un seul toutes les informations sur les clients et leurs fournisseurs.

Autres utilisations des jointures : jointures à gauche.

Les requêtes peuvent aussi servir à trouver de la non-information. Dans notre exemple cela pourrait être les fournisseurs qui n'ont jamais vendus à un client. Nous allons étudier un autre cas plus simple et qui se présente souvent à nous : des données ont été saisies dans des feuilles de calculs avec les redondances classiques, nous devons les charger dans la base de données. Mais avant de faire ce travail, nous devons nous assurer que les informations redondantes sont correctement saisies de part et d'autres.

Dans notre exemple précédent, on récupère une pseudo-table avec les clients et une autre avec les colis qui contient elle aussi les noms des clients. Avant de charger cela, nous devons vérifier que les noms de la pseudo-table «colis» sont bien présent, et écrit de la même façon que dans la pseudo-table «client». Nous allons donc charger brutalement ces feuilles dans le SGBD et passer des requêtes itératives pour corriger les erreurs qui peuvent exister. Nous allons faire des requêtes de non-correspondance. Cela donnera une requête comme celle-ci:


SELECT Client.*, Colis.*
FROM Colis
LEFT JOIN Client
ON Colis.nomClient = Client.nomClient
WHERE Client.nomClient IS NULL

Quand ce travail de correction est réalisé, nous pouvons passer une requête de modification pour mettre à jour le champ «idClient» dans la table «Colis» par rapport à celle «Client», à partir d'une jointure efficace sur le nom en clair du client.

Daniel Lucazeau
@jornet.com
Chef de projet Internet
Développeur informatique

Tous droits réservés - Reproduction même partielle interdite sans autorisation préalable

 
 
Google
 
Web www.sam-mag.com
 

Copyright © ACORUS 2004. All Rights Reserved

- Sam-Mag.com Referencement-Sur-mesure - Referencer-Site-Web.com
Visibilite-Internationale.com - Referencement-Immobilier.net