2010-12-11 16 views
68

Así que he estado buscando en Internet la última hora, leyendo y buscando la respuesta definitiva a esta simple pregunta.¿Cuál es el comportamiento predeterminado de MySQL JOIN, INNER u OUTER?

¿Cuál es el JOIN predeterminado en MySQL?

SELECT * FROM t1 JOIN t2 

¿Eso es lo mismo que

SELECT * FROM t1, t2 

OR 

SELECT * FROM t1 INNER JOIN t2 

también una cuestión relacionada, cuando se utiliza cláusulas "dónde", es lo mismo que JOIN o INNER JOIN?

En este momento estoy pensando que un JOIN independiente es idéntico al uso de comas y cláusulas WHERE.

Respuesta

87

En la escritura de MySQL JOIN no calificado implica INNER JOIN. En otras palabras, el INNER en INNER JOIN es opcional. INNER y CROSS son sinónimos en MySQL. Para mayor claridad, escribo JOIN o INNER JOIN si tengo una condición de unión y CROSS JOIN si no tengo una condición.

La sintaxis permitida para las uniones se describe en el documentation.


En este momento estoy pensando en un stand-alone JOIN es nada más que comas (idéntico a) el uso y las cláusulas WHERE.


El efecto es el mismo, pero la historia detrás de ellos es diferente. La sintaxis de coma es del estándar ANSI-89. Sin embargo, hay una serie de problemas con esta sintaxis, por lo que en el estándar ANSI-92 se introdujo la palabra clave JOIN.

Recomiendo encarecidamente que siempre utilice la sintaxis JOIN en lugar de la coma.

  • T1 JOIN T2 ON ... es más legible que T1, T2 WHERE ....
  • Es más fácil de mantener porque las relaciones y los filtros de la tabla están claramente definidos en lugar de estar mezclados.
  • La sintaxis JOIN es más fácil de convertir a OUTER JOIN que la sintaxis de coma.
  • Mezclar la sintaxis de coma y JOIN en la misma instrucción puede dar errores curiosos debido a las reglas de precedencia.
  • Es menos probable que se cree accidentalmente un producto cartesiano cuando se usa la sintaxis JOIN debido a una cláusula de unión olvidada, porque las cláusulas join se escriben al lado de las uniones y es fácil ver si falta alguna.
+0

Sweet, gracias por aclararme esta simple pregunta :) En el pasado siempre he usado comas + donde cláusulas ... pero se convertirán a usar JOINs según su consejo. Gracias –

+0

Hey Mark, ¿qué quieres decir con mezclas de JOIN y comas? Mezcle consultas como esta, SELECCIONE * FROM t1 UNIÓN IZQUIERDA (t2, t3, t4) ENCENDIDO (t2.a = t1.a AND t3.b = t1.b AND t4.c = t1.c)? –

+2

@Quang: Esto, por ejemplo, fallará: 'SELECT * FROM t1, t2 JOIN t3 ON t1.x = t3.y DÓNDE t1.a = t2.b' –

0

Todos son equivalentes, y también equivalentes a CROSS JOIN.

Existen algunas diferencias entre el uso de la coma y la sintaxis [INNER | CROSS] JOIN, que pueden ser importantes al unir más tablas. Casi todo lo que necesita saber se describe aquí en el MySQL JOIN documentation.

+0

Básicamente sí. – Mchl

+1

^--- la respuesta a la pregunta es JOIN (independiente) básicamente es lo mismo que INNER y comma + where clauses –