(reprise du message précédent)
Exact il y a deux erreurs dans la première requête !
c.Nom au lieu de Nom dans le AND
et LIKE au lieu de =
La sélection sur le nom se fait dans la table Client. Quoi que ça marcherait peut-être quand même, selon les SGBD.
Ta seconde requête est plus correcte, nettement plus propre. Sur deux tables on peut s'en passer, mais dès qu'on part sur des jointures à plusieurs tables, il vaut mieux utiliser LEFT JOIN ou RIGHT JOIN. Ca permet de donner un ordre à la jointure, si tu veux. C'est pas facile à expliquer
Utiliser la clause WHERE pour faire la jointure est une syntaxe plus ancienne, et sémantiquement incorrecte (puisqu'on est sur Alsa :-p ). Une clause WHERE sert à filtrer, pas à faire la jonction entre deux tables. De plus, les SGBD modernes sont plus efficaces sur un JOIN ... ON que sur un WHERE m.machin = t.truc.
Dans la mesure du possible, si on veut faire une jointure, il faut utiliser la clause faite exprès pour ça...
Et puis moi je trouve ça plus lisible
Un cours très bien : http://sqlpro.developpez.com/cours/sqlaz/jointures/
Vi t'as raison on est complètement HS
Modifié par mistike (05 Dec 2008 - 19:27)
matmat a écrit :
Je profite pour poser une petite question quel est la différence entre :
SELECT c.Code_client, c.Nom, i.Code_client, i.Code_inter FROM Clients c, Intervention i WHERE c.Code_client = i.Code_client AND Nom = '%nom%'"
et
SELECT Clients.Code_client, Clients.Nom, Intervention.Code_client,Intervention.Code_inter FROM Clients LEFT JOIN Intervention ON Clients.Code_client = Intervention.Code_client WHERE Clients.Nom LIKE '%nom%'"
?
Pourquoi la première marcherais vu que la table Intervention n'a pas de champs nom donc ne remplie pas les deux conditions du select? C'est pour ça que je comprend pas trop la logique de cette requête mais il y a peut être un truc que j'ai pas pigé.
Si la première marche alors pourquoi des fois utiliser LEFT JOIN et d'autre fois non?
Exact il y a deux erreurs dans la première requête !
SELECT
c.Code_client,
c.Nom,
i.Code_client,
i.Code_inter
FROM Clients c, Intervention i
WHERE c.Code_client = i.Code_client
AND c.Nom LIKE '%nom%'"
c.Nom au lieu de Nom dans le AND
et LIKE au lieu de =
La sélection sur le nom se fait dans la table Client. Quoi que ça marcherait peut-être quand même, selon les SGBD.
Ta seconde requête est plus correcte, nettement plus propre. Sur deux tables on peut s'en passer, mais dès qu'on part sur des jointures à plusieurs tables, il vaut mieux utiliser LEFT JOIN ou RIGHT JOIN. Ca permet de donner un ordre à la jointure, si tu veux. C'est pas facile à expliquer

Utiliser la clause WHERE pour faire la jointure est une syntaxe plus ancienne, et sémantiquement incorrecte (puisqu'on est sur Alsa :-p ). Une clause WHERE sert à filtrer, pas à faire la jonction entre deux tables. De plus, les SGBD modernes sont plus efficaces sur un JOIN ... ON que sur un WHERE m.machin = t.truc.
Dans la mesure du possible, si on veut faire une jointure, il faut utiliser la clause faite exprès pour ça...
Et puis moi je trouve ça plus lisible

Un cours très bien : http://sqlpro.developpez.com/cours/sqlaz/jointures/
Heyoan a écrit :
Et autresinon je propose qu'on arrête de dériver de la question de mokacola (qui, s'il en a besoin, pourra consulter une foultitude de ressources comme http://dev.mysql.com/doc/ ou http://sqlpro.developpez.com/ ). cligne
Vi t'as raison on est complètement HS

Modifié par mistike (05 Dec 2008 - 19:27)