par
ouckileou » 06 févr. 2009, 01:02
Je préfère placer dans le WHERE les champs que je souhaite à tout prix sortir, et dans le JOIN, ceux qui sont optionnels : ) D'ailleurs les JOIN servent à ça nan ? Que la requête sorte des résultats, même si le JOIN ne retourne rien, contrairement au WHERE.
Heu non...
Déjà je crois que tu confonds FROM et WHERE dans tes 2 derniers messages.
Ensuite, les champs ou colonnes que l'on souhaite sélectionner, sont dans le SELECT.
Le FROM sert à spécifier la ou les tables dans lesquelles ils se trouvent.
Le WHERE sert à filtrer les tuples (ou lignes) renvoyés grâce à des conditions.
Les JOIN servent à faire des jointures entre ces tables.
Donc il est vrai qu'on peut mettre plusieurs tables dans le FROM, et mettre les conditions de jointure dans le WHERE, mais souvent on préfère structurer les choses, séparer les jointures du filtrage :
SELECT t1.colonne1, t1.colonne2, t2.colonne1
FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.id
WHERE t1.colonne4 > 5;
Quand tu dis optionnels, je penseq que tu veux dire que tu veux les données de la table 1 même s'il n'y a pas de jointure avec la table 2, c'est là qu'intervent
LEFT OUTER JOIN.
Si tu ne veux que les lignes de la table 1 qui ont une correspondance dans la table 2, alors c'est
INNER JOIN. C'est que fait une jointure placée dans le WHERE.
Effectivement, un petit tour dans le manuel te serait très utile

[quote="Anonymous"]Je préfère placer dans le WHERE les champs que je souhaite à tout prix sortir, et dans le JOIN, ceux qui sont optionnels : ) D'ailleurs les JOIN servent à ça nan ? Que la requête sorte des résultats, même si le JOIN ne retourne rien, contrairement au WHERE.[/quote]
Heu non...
Déjà je crois que tu confonds FROM et WHERE dans tes 2 derniers messages.
Ensuite, les champs ou colonnes que l'on souhaite sélectionner, sont dans le SELECT.
Le FROM sert à spécifier la ou les tables dans lesquelles ils se trouvent.
Le WHERE sert à filtrer les tuples (ou lignes) renvoyés grâce à des conditions.
Les JOIN servent à faire des jointures entre ces tables.
Donc il est vrai qu'on peut mettre plusieurs tables dans le FROM, et mettre les conditions de jointure dans le WHERE, mais souvent on préfère structurer les choses, séparer les jointures du filtrage :
SELECT t1.colonne1, t1.colonne2, t2.colonne1
FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.id
WHERE t1.colonne4 > 5;
Quand tu dis optionnels, je penseq que tu veux dire que tu veux les données de la table 1 même s'il n'y a pas de jointure avec la table 2, c'est là qu'intervent [u]LEFT OUTER[/u] JOIN.
Si tu ne veux que les lignes de la table 1 qui ont une correspondance dans la table 2, alors c'est [u]INNER[/u] JOIN. C'est que fait une jointure placée dans le WHERE.
Effectivement, un petit tour dans le manuel te serait très utile :D