Qu'est-ce qui fait d'un tableau donné le tableau de gauche?
Est-ce que la table est indiquée dans la partie "De" de la requête?
Ou, s'agit-il du tableau de gauche car il se trouve à gauche de l'opérateur =?
Sont l'équivalent suivant
SELECT *
FROM left_table
LEFT JOIN right_table ON left_table.right_id = right_table.id
et
SELECT *
FROM left_table
LEFT JOIN right_table on right_table.left_id = left_table.id
???
Merci
Le tableau de gauche est le premier tableau de la sélection. Oui, vos deux exemples sont équivalents.
La bonne table est toujours la table sur laquelle vous vous joignez. Alors oui, vos deux déclarations sont équivalentes.
JOIN [Table] ON ...
[Table] est toujours la bonne table.
Environ "gauche" est le résultat de tout ce qui apparaît en premier dans l'ensemble de la clause FROM lors de la lecture de gauche à droite - y compris le résultat d'autres JOIN, sous-requêtes, VIEWs et STORED PROCEDURES.
Les deux instructions SQL sont équivalentes car le =
L'opérateur à la partie ON
de la clause JOIN
est symétrique (si a = b alors b = a) donc le résultat est le même quel que soit l'ordre .
La jointure régulière affiche uniquement les lignes où la clause ON du JOIN est vraie, tandis que le LEFT JOIN affiche également les enregistrements de "gauche" si la condition est fausse (montrant NULL pour toute colonne de "droite" présente dans SELECT).
Par exemple:
-- People: -- Car
id | name owner_id | model
---+------------ ---------+------------
1 | Paul 1 | Ferrari
2 | Nancy 2 | Porsche
3 | Arthur NULL | Lamborghini
4 | Alfred 10 | Maserati
> select people.name, car.model from people join car on car.owner_id=people.id;
name | model
---------+--------------
Paul | Ferrari
Nancy | Porsche
2 record(s) found
> select people.name, car.model from people left join car on
car.owner_id=people.id;
name | model
---------+--------------
Paul | Ferrari
Nancy | Porsche
Arthur | NULL
Alfred | NULL
4 record(s) found
> select people.name, car.model from people left join car on
people.id = car.owner_id;
name | model
---------+--------------
Paul | Ferrari
Nancy | Porsche
Arthur | NULL
Alfred | NULL
4 record(s) found
Voir ceci pour une assez bonne procédure pas à pas sur les jointures: http://en.wikipedia.org/wiki/Join_ (SQL)
Et oui, les deux déclarations sont équivalentes :-)
Oui, il est déterminé par le côté de l'opérateur JOIN sur lequel la table apparaît. Vos deux exemples sont en effet équivalents.