unir tablas tabla misma interna horizontalmente ejemplos ejemplo consultas consulta concatenar sql

tablas - Sintaxis de unión interna de SQL



unir dos consultas sql misma tabla (6)

En realidad, estos ejemplos son equivalentes y ninguno es un producto cartesiano. Se devuelve un producto cartesiano cuando une dos tablas sin especificar una condición de unión, como en

select * from t1,t2

Hay una buena discusión de esto en Wikipedia .

los dos bits de SQL a continuación obtienen el mismo resultado

SELECT c.name, o.product FROM customer c, order o WHERE c.id = o.cust_id AND o.value = 150 SELECT c.name, o.product FROM customer c INNER JOIN order o on c.id = o.cust_id WHERE o.value = 150

He visto ambos estilos utilizados como estándar en diferentes compañías. Por lo que he visto, el segundo es lo que la mayoría de la gente recomienda en línea. ¿Hay alguna razón real para esto aparte del estilo? ¿El uso de una unión interna a veces tiene un mejor rendimiento?

Me he dado cuenta de que los desarrolladores de Ingres y Oracle tienden a usar el primer estilo, mientras que los usuarios de Microsoft SQL Server han tendido a usar el segundo, pero eso podría ser solo una coincidencia.

Gracias por cualquier idea, me he preguntado sobre esto por un tiempo.

Editar: he cambiado el título de ''Combinación interna SQL frente a producto cartesiano'' porque estaba usando la terminología incorrecta. Gracias por todas las respuestas hasta ahora.


Oracle tardó en admitir la sintaxis JOIN ... ON (ANSI) (no hasta Oracle 9), es por eso que los desarrolladores de Oracle a menudo no la usan.

Personalmente, prefiero usar la sintaxis ANSI cuando está lógicamente claro que una tabla dirige la consulta y las otras son tablas de búsqueda. Cuando las tablas son "iguales", tiendo a usar la sintaxis cartesiana.

El rendimiento no debe diferir en absoluto.


Para responder a una parte de su pregunta, creo que los primeros errores en la sintaxis JOIN ... ON en Oracle desanimaron a los usuarios de Oracle de esa sintaxis. No creo que haya ningún problema en particular ahora.

Son equivalentes y deben analizarse en la misma representación interna para la optimización.


Ambas consultas están realizando una unión interna, solo una sintaxis diferente.


La sintaxis JOIN ... ON ... es una adición más reciente a las especificaciones ANSI e ISO para SQL. La sintaxis JOIN ... ON ... generalmente se prefiere porque 1) mueve los criterios de unión fuera de la cláusula WHERE haciendo que la cláusula WHERE solo sea filtrada y 2) la hace más obvia si está creando un temido producto cartesiano ya que cada uno JOIN debe ir acompañado de al menos una cláusula ON. Si todos los criterios de unión están simplemente en Y en la cláusula WHERE, no es tan obvio cuando faltan uno o más.


Ambas consultas son uniones internas y equivalentes. El primero es el método más antiguo de hacer las cosas, mientras que el uso de la sintaxis JOIN solo se hizo común después de la introducción del estándar SQL-92 (creo que está en las definiciones anteriores, simplemente no fue particularmente utilizado antes).

El uso de la sintaxis JOIN es muy recomendable ya que separa la lógica de unión de la lógica de filtrado en la cláusula WHERE. Mientras que la sintaxis JOIN es realmente azúcar sintáctica para las uniones internas, su fuerza radica en las uniones externas donde la sintaxis old * puede producir situaciones en las que es imposible describir inequívocamente la unión y la interpretación depende de la implementación. El [IZQUIERDA | DERECHA] La sintaxis JOIN evita estas dificultades y, por lo tanto, para mantener la coherencia, es preferible utilizar la cláusula JOIN en todas las circunstancias.

Tenga en cuenta que ninguno de estos dos ejemplos son productos cartesianos. Para eso usarías cualquiera

SELECT c.name, o.product FROM customer c, order o WHERE o.value = 150

o

SELECT c.name, o.product FROM customer c CROSS JOIN order o WHERE o.value = 150