Clause ON pour les jointures à gauche

Eléphanteau du PHP | 37 Messages

27 oct. 2011, 21:03

Bonjours, j'aimerai savoir pourquoi pour faire la condition de jointure dans une jointure à gauche il faux utiliser
la clause ON et pas la clause WHERE et je poste aussi parce que j'aimerai quelleque éxplication sur la clause ON
car quand je tape sur google clause ON mysql je ne trouve rien :shock:

merci à vous !!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 oct. 2011, 21:31

En fait cela dépend de ton type de jointure interne (inner) ou externe (outer).

Dans le premier cas, tu ne vas récupérer que les enregistrements qui ont un résultat dans chacune des tables liées. Dans ce cas là, tu peux effectivement utiliser la clause where aussi bien que la syntaxe join.

Dans le second, tu récupéreras les enregistrements de ta table principale même s'il n'y a pas de correspondance dans les tables liées. Dans ce cas, il te faut obligatoirement utiliser la syntaxe join.

Quoi qu'il en soit, la syntaxe join te permet également d'avoir une construction et une lecture simplifiée de tes requêtes. En effet, dans la construction de ta requête cela te permet de regrouper la liste des tables et les conditions qui les lient d'une part (join), et d'autre part avoir tout les prédicats qui vont réellement filtrer les résultats (where) :

Code : Tout sélectionner

SELECT ... FROM ... LEFT INNER JOIN .... ON .... LEFT INNER JOIN .... ON .... WHERE ..... AND .... ORDER BY ...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 37 Messages

27 oct. 2011, 21:52

Don si je comprend bien la clause ON qui s'utilise uniquement avec la syntaxe JOIN existe seulement pour séparer visuelement les conditions qui lient les tables et les filtres utilisé avec la clause where comme not null etc
Mais dans la logique on pourrait utiliser uniquement une clause where pour éfféctuer les conditions et les filtres
Donc la clause ON aide seulement simplement à avoir une construction et une lecture simplifiée ?

merci beaucoups !!

Eléphanteau du PHP | 37 Messages

27 oct. 2011, 22:03

Dans une condition qui utilise la clause ON pour les liaisons entre les tables donc, peut-on utiliser d'autre opérateur que l'opérateur de comparaison = ?

Sinon voici mes note sur la clause ON :D

La clause ON s'utilise avec les opérateurs de comparaison ....(et les opérateur logique ?).
Elle s'utilise uniquement avec la syntaxe LEFT JOIN, RIGHT JOIN, INNER JOIN, CROSS JOIN.
La clause ON s'utilise pour faire une condition uniquement sur les liaisons entre les tables.
Pour faire un filtrage plus précis on utilise la clause WHERE.
Elle s'utilise avec les instructions SQL suivante : SELECT ...

Sont-elle éxacte merci!!!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 oct. 2011, 22:41

salut,

le mieux c'est un cours sur le sujet http://sqlpro.developpez.com/cours/sqlaz/jointures/ qui va t'expliquer ce qu'est une jointure et les différentes jointure qui existe.

cela est intéressant car dans le de clef étrangère "normées" (j'entends par la que la clef ai le même nom dans les deux tables) tu peu simplement utiliser le mot clef using pour indiquer sur quoiporte la jointure.
par exemple : select truc, machin from table1 join table2 using (clefdetable);

enfin bref bonne lecture :)


@+
Il en faut peu pour être heureux ......