MySQL soporta las siguientes sintaxis de
          JOIN para la parte
          table_references de comandos
          SELECT y DELETE y
          UPDATE de múltiples tablas:
        
table_reference,table_referencetable_reference[INNER | CROSS] JOINtable_reference[join_condition]table_referenceSTRAIGHT_JOINtable_referencetable_referenceLEFT [OUTER] JOINtable_referencejoin_conditiontable_referenceNATURAL [LEFT [OUTER]] JOINtable_reference{ ONtable_referenceLEFT OUTER JOINtable_referenceONconditional_expr}table_referenceRIGHT [OUTER] JOINtable_referencejoin_conditiontable_referenceNATURAL [RIGHT [OUTER]] JOINtable_reference
          table_reference se define como:
        
tbl_name[[AS]alias] [[USE INDEX (key_list)] | [IGNORE INDEX (key_list)] | [FORCE INDEX (key_list)]]
          join_condition se define como:
        
ONconditional_expr| USING (column_list)
          Generalmente no debería tener ninguna condición en la parte
          ON que se usa para restringir qué
          registros desea en el conjunto de resultados, pero en su lugar
          especificar esas condiciones en la cláusula
          WHERE . Hay excepciones a esta regla.
        
          La sintaxis { OJ ... LEFT OUTER JOIN ...}
          mostrada en la lista precedente existe sólo por
          compatibilidad con ODBC.
        
              Puede poner un alias en una referencia de tabla usando
              tbl_name AS
              alias_nametbl_name alias_name:
            
mysql> SELECT t1.name, t2.salary FROM employee AS t1, info AS t2 -> WHERE t1.name = t2.name; mysql> SELECT t1.name, t2.salary FROM employee t1, info t2 -> WHERE t1.name = t2.name;
              El condicional ON es cualquier
              expresión condicional de la forma que puede usarse en una
              cláusula WHERE .
            
              Si no hay ningún registro coincidiente para la tabla de
              la derecha en la parte ON o
              USING en un LEFT
              JOIN, se usa un registro con todos las columnas
              a NULL para la tabla de la derecha.
              Puede usar este hecho para encontrar registros en una
              tabla que no tengan contraparte en otra tabla:
            
mysql> SELECT table1.* FROM table1 -> LEFT JOIN table2 ON table1.id=table2.id -> WHERE table2.id IS NULL;
              Este ejemplo encuentra todos los registros en
              table1 con un valor
              id no presente en
              table2 (esto es, todos los registros en
              table1 sin registro correspondiente en
              table2). Esto asume que
              table2.id se declara NOT
              NULL. Consulte
              Sección 7.2.9, “Cómo optimiza MySQL los LEFT JOIN y RIGHT
        JOIN”.
            
              La cláusula USING
              ( muestra
              una lista de columnas que deben existir en ambas tablas.
              Las siguientes dos cláusulas son semánticamente
              idénticas:
            column_list)
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
              El NATURAL [LEFT] JOIN de dos tablas se
              define semánticamente equivalente a un INNER
              JOIN o LEFT JOIN con una
              cláusula USING que nombra todas las
              columnas que existen en ambas tablas.
            
              INNER JOIN y ,
              (coma) son semánticamente equivalentes en la ausencia de
              una condicicón de join: ambos producen un producto
              Cartesiano entre las tablas especificadas (esto es, cada
              registro en la primera tabla se junta con cada registro en
              la segunda tabla).
            
              RIGHT JOIN funciona análogamente a
              LEFT JOIN. Para mantener el código
              portable entre bases de datos, se recomienda que use
              LEFT JOIN en lugar de RIGHT
              JOIN.
            
              STRAIGHT_JOIN es idéntico a
              JOIN, excepto que la tabla de la
              izquierda se lee siempre antes que la de la derecha. Esto
              puede usarse para aquéllos casos (escasos) en que el
              optimizador de join pone las tablas en orden incorrecto.
            
          Puede proporcionar pistas de qué índice debe usar MySQL
          cuando recibe información de una tabla. Especificando
          USE INDEX (key_list), puede decirle a MySQL
          que use sólo uno de los posibles índices para encontrar
          registros en la tabla. La sintaxis alternativa IGNORE
          INDEX (key_list) puede usarse para decir a MySQL que
          no use algún índice particular. Estos trucos son útiles si
          EXPLAIN muestra que MySQL está usando el
          índice incorrecto de la lista de posibles índices.
        
          También puede usar FORCE INDEX, que actúa
          como USE INDEX
          ( pero con la
          adición que un escaneo de tabla se asume como operación
          muy cara. En otras palabras, un escaneo
          de tabla se usa sólo si no hay forma de usar uno de los
          índices dados para encontrar registros en la tabla.
        key_list)
          USE KEY, IGNORE KEY, y
          FORCE KEY son sinónimos de USE
          INDEX, IGNORE INDEX, y
          FORCE INDEX.
        
          Nota: USE
          INDEX, IGNORE INDEX, y
          FORCE INDEX sólo afecta los índices
          usados cuando MySQL decide cómo encontrar registros en la
          tabla y cómo hacer el join. No afecta si un índice está en
          uso cuando se resuelve unORDER BY o
          GROUP BY.
        
Algunos ejemplos de join:
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;
          Consulte Sección 7.2.9, “Cómo optimiza MySQL los LEFT JOIN y RIGHT
        JOIN”.
        
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.

