On peut
joindre jusqu'à 256 tables, mais le nombre de tables utilisées dans les
jointures est souvent largement inférieur à 256 ! Dès que
l'on spécifie plusieurs tables dans la clause FROM de la requête,
on effectue une jointure. SQL ne sait pas tout seul comment faire cette jointure,
nous devons donc bien le lui spécifier. D'ailleurs si on ne précise pas
de condition de sélection, le résultat obtenu sera le produit cartésien des tables
indiquées. Cette condiion de sélection s'effectue naturellement
dans la clause WHERE
Equi-jointure
La jointure
de deux tables sur une colonne commune s'appelle une équi-jointure. Par
exemple trouver les commandes d'un client, les deux tables ont la colonne commune
qui est "code client", une commande n'appartient qu'à un client
- en général :-). Ce type de jointure provient d'une relation 1-n
lors de la conception, c'est à dire dans notre exemple:
(1 client - n commandes).
SELECT
* FROM tabCli, tabCom WHERE tabCli.numCom = tabCom.numCom
Il faut préfixer
numComm du nom de sa table d'origine pour que SQL ny trouve pas d'ambiguïté.
Remarque
: c'est là que l'on se rend compte de la nécessité de bien
construire sa base et donc de bien la concevoir. Si cette étape est bien
faite toutes les équi-jointures vont être évidentes à
écrire.
Jointure
d'une table à elle-même
Il est parfois
utile de joindre une table sur elle-même. Par exemple l'utilisation de catégories
et de sous-catégories ne donnent pas lieu à la construction de deux
tables mais plutôt à l'existence d'une colonne supplémentaire
dans la table qui donne les cas échéant l'identifiant de la catégorie
"mère". Par exemple, pour obtenir toutes les catégories
avec leur sous-catégorie à partir de la table tabCat suivante :
SELECT tabCat.nom, tabCatMere.nom FROM tabCat, tabCat AS
tabCatMere WHERE tabCatMere.id=tabCat.idMere
Nous sommes
obligés de renommer l'une des deux tables pour que SQL sache de quel identifiant
"id" on parle. La sélection a lieu ici sur toutes les lignes
de la table dont l'identifiant de la colonne "idMere" a un équivalent
dans la colonne "id" quelque part dans la table, ce qui correspond à
notre définition de sous-catégorie.