¿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.
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 queT1, 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.
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
.
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