MySQL supporte les syntaxes suivantes de
          JOIN pour une utilisation dans les
          SELECT :
        
reference_table, reference_table
reference_table [CROSS] JOIN reference_table
reference_table INNER JOIN reference_table condition_jointure
reference_table STRAIGHT_JOIN reference_table
reference_table LEFT [OUTER] JOIN reference_table condition_jointure
reference_table LEFT [OUTER] JOIN reference_table
reference_table NATURAL [LEFT [OUTER]] JOIN reference_table
{ OJ reference_table LEFT OUTER JOIN reference_table ON expr_conditionnelle }
reference_table RIGHT [OUTER] JOIN reference_table condition_jointure
reference_table RIGHT [OUTER] JOIN reference_table
reference_table NATURAL [RIGHT [OUTER]] JOIN reference_table
          où reference_table est définie de la
          manière suivante :
          
        
nom_de_table [[AS] alias] [USE INDEX (liste_de_clefs)] [IGNORE INDEX (liste_de_clefs)]
          et condition_jointure est définie comme
          suit :
        
ON expr_conditionnelle | USING (column_list)
          Généralement, vous ne devez avoir aucune condition, dans la
          partie ON, qui soit utilisée pour
          spécifier les lignes que vous voulez obtenir en résultat.
          (il y a des exceptions à cette règle). Si vous voulez
          restreindre les lignes résultantes, vous devez le faire dans
          la clause WHERE.
        
          Notez que dans les versions antérieures à la 3.23.17,
          INNER JOIN ne prenait pas en compte
          condition_jointure !
        
          La dernière syntaxe de LEFT OUTER JOIN vue
          plus haut, n'existe que pour assurer la compatibilité avec
          ODBC :
        
              On peut créer un alias sur une référence de table en
              utilisant nom_de_table AS alias_name ou
              nom_de_table alias_name :
            
mysql>SELECT t1.name, t2.salary FROM employee AS t1, info AS t2->WHERE t1.name = t2.name;
              La condition ON est de la même forme
              qu'une condition pouvant être utilisée dans la clause
              WHERE.
            
              Si aucune ligne ne correspond dans la table de droite dans
              la partie ON ou
              USING du LEFT JOIN,
              une ligne avec toutes les colonnes mises à
              NULL est utilisé en remplacement. Vous
              pouvez utiliser ce fait pour trouver les enregistrements
              dans une table qui n'ont pas de correspondances dans une
              autre :
            
mysql>SELECT table1.* FROM table1->LEFT JOIN table2 ON table1.id=table2.id->WHERE table2.id IS NULL;
              Cet exemple retourne toutes les lignes trouvées dans
              table1 avec une valeur de
              id qui n'est pas présente dans
              table2 (autrement dit, toutes les
              lignes de table1 sans correspondances
              dans la table table2). Cela demande que
              table2.id soit déclaré NOT
              NULL, bien sur. See
              Section 7.2.9, « Comment MySQL optimise les clauses LEFT JOIN et
        RIGHT JOIN ».
            
              La clause USING
              (column_list) recense la liste des
              colonnes qui doivent exister dans les deux tables. Les
              clauses USING suivantes sont
              identiques :
            
a LEFT JOIN b USING (c1,c2,c3) a LEFT JOIN b ON a.c1=b.c1 AND a.c2=b.c2 AND a.c3=b.c3
              La jointure de deux tables avec NATURAL [LEFT]
              JOIN est définie pour être sémantiquement
              équivalent à un INNER JOIN ou un
              LEFT JOIN avec une clause
              USING qui nomme toutes les colonnes qui
              existent dans les deux tables.
            
              
              INNER JOIN et ,
              (virgule) sont sémantiquement équivalents. Les deux
              opèrent une jointure totale sur les tables utilisées.
              Normalement, vous spécifiez les conditions de jointure
              dans la clause WHERE.
            
              RIGHT JOIN fonctionne de fa¸on
              analogue à LEFT JOIN. Pour garder un
              code facilement portable, il est recommandé d'utiliser
              les LEFT JOIN à la place des
              RIGHT JOIN.
            
              
              STRAIGHT_JOIN est identique à
              JOIN, sauf que la table de gauche est
              toujours lues avant celle de droite. Cela peut être
              utilisé dans les cas (rares) où l'optimiseur des
              jointures place les tables dans le mauvais ordre.
            
          A partir de la version 3.23.12 de MySQL, vous pouvez donner
          des indications à propos de l'index à utiliser lors de la
          lecture d'informations d'une table. C'est utile si
          EXPLAIN montre que MySQL utilise un mauvais
          index de la liste de ceux disponibles. En spécifiant
          USE INDEX (liste_de_clefs), vous pouvez
          forcer MySQL à utiliser un index spécifique pour trouver les
          enregistrements dans la table. Une alternative réside dans
          l'utilisation de IGNORE INDEX
          (liste_de_clefs) pour dire à MySQL de ne pas
          utiliser certains index.
        
          En MySQL 4.0.9, vous pouvez aussi utiliser la clause
          FORCE INDEX. Elle se comporte comme
          USE INDEX (key_list) mais en supposant que
          les scan de tables seront très coûteux.
          En d'autres termes, les scans de tables seront utilisés que
          s'il n'y a pas d'autres méthodes pour trouver les lignes.
        
          USE/IGNORE KEY sont des synonymes de
          USE/IGNORE INDEX.
        
          Note : USE
          INDEX, IGNORE INDEX et
          FORCE INDEX affectent uniquement les index
          qui sont utilisés lors du choix de la méthode de sélection
          des lignes dans la table, et comment faire une jointure. Elles
          n'affectent pas l'utilisation finale de l'index dans les
          clauses ORDER BY ou GROUP
          BY.
        
Quelques exemples :
mysql>SELECT * FROM table1,table2 WHERE table1.id=table2.id;mysql>SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id;mysql>SELECT * FROM table1 LEFT JOIN table2 USING (id);mysql>SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id->LEFT JOIN table3 ON table2.id=table3.id;mysql>SELECT * FROM table1 USE INDEX (key1,key2)->WHERE key1=1 AND key2=2 AND key3=3;mysql>SELECT * FROM table1 IGNORE INDEX (key3)->WHERE key1=1 AND key2=2 AND key3=3;
          See Section 7.2.9, « Comment MySQL optimise les clauses LEFT JOIN et
        RIGHT JOIN ».
        
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.

