¿Cuál es el comportamiento predeterminado de MySQL JOIN, INTERNO o EXTERNO?


Así que he estado buscando en Internet la última hora, leyendo y buscando la respuesta definitiva a esta simple pregunta.

¿Cuál es la COMBINACIÓN predeterminada en MySQL?

SELECT * FROM t1 JOIN t2

Es lo mismo que

SELECT * FROM t1, t2

OR

SELECT * FROM t1 INNER JOIN t2

También una pregunta relacionada, cuando usas cláusulas "WHERE", ¿es lo mismo que JOIN o INNER JOIN ?

Ahora mismo estoy pensando que una UNIÓN independiente es idéntica a usar comas y cláusulas WHERE.

Author: Stijn de Witt, 2010-12-11

2 answers

En escritura MySQL JOIN no calificada 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 combinación y CROSS JOIN si no tengo una condición.

La sintaxis permitida para las uniones se describe en la documentación .


Ahora mismo estoy pensando que una UNIÓN independiente no es más que (idéntica a) usar comas y DONDE clausula.


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 use la sintaxis de unión en lugar de la coma.

  • T1 JOIN T2 ON ... es más legible que T1, T2 WHERE ....
  • Es más mantenible porque las relaciones de la tabla y los filtros están claramente definidos en lugar de mezclarse entre sí.
  • La sintaxis de UNIÓN es más fácil de convertir a UNIÓN EXTERNA que la sintaxis de coma.
  • Mezclar la sintaxis coma y JOIN en la misma instrucción puede dar errores curiosos debido a las reglas de precedencia.
  • Es menos probable crear accidentalmente un producto cartesiano cuando se usa la sintaxis de UNIÓN debido a una cláusula de unión olvidada, porque las cláusulas de unión se escriben junto a las uniones y es fácil ver si una es faltar.
 97
Author: Mark Byers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-05 12:14:34

Estos son todos equivalentes, y también iguales a, CROSS JOIN.

Hay algunas diferencias entre usar la sintaxis de coma y [INNER | CROSS] JOIN, que podrían ser importantes al unir más tablas. Casi todo lo que necesita saber se describe aquí en la documentación MySQL JOIN .

 0
Author: Mchl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-31 02:15:24