| |
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.idClient
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
|
| |
|
| |

|
|
|
|
Sponsors
Referenceur.com
Referenceur.com est spécialisé dans le référencement sur mesure et le
positionnement de sites internet : positionnement garanti, achat de mots
clés, maintenance...
ACORUS
Notre activité : dynamisez votre présence en ligne : référencement, campagne
par achat de mot clé, communiqué de presse, solutions Marketing Internet
|