quelle formule SQL pour cette table ?

x0s
Eléphanteau du PHP | 22 Messages

12 mai 2008, 11:28

Le plus simple, dans la mesure où dans les deux tables le champs commun est num_magasin, est d'opter pour un NATURAL JOIN :

SELECT nom_magasin, num-magasin, montant_facture
FROM Magasin NATURAL JOIN Factures
WHERE montant_facture>=1500;

Sinon vous pouvez optez pour :

SELECT nom_magasin, num-magasin, montant_facture
FROM Magasin, Factures
WHERE Magasin.num_magasin=Factures.num_magasin and montant_facture>=1500;
Il y a encore une autre manière d'effectuer ce genre de jointure, c'est d'utiliser les jointures internes (INNER JOIN). En effet Les jointures naturelles (NATURAL JOIN sont assez ambiguës car lors de l'évolution d'un projet ou de la structure de la base de donnée concernée, il y a un grand risque qu'il n'y ait plus de jointure 'naturelle" à proprement parlé.
De plus le compilateur SQL cherche par lui-même un champs unique correspondant entre les deux tables, en utilisant INNER JOIN et la clause USING , il devient possible de faire une jointure interne spécifiée, comme ça le compilateur ne tourne pas en rond, et la requête garde son sens original.

Code : Tout sélectionner

SELECT mag.nom_magasin, mag.num_magasin, fact.montant_facture, fact.num_magasin FROM Magasin mag INNER JOIN Factures fact USING(num_magasin) HAVING fact.montant_facture>=1500;
PS: la clause USING est également utilisable dans une jointure naturelle.