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.