¿Cuál es la diferencia entre una unión natural y una unión interna?
sql
join
natural-join
Herrero
fuente
fuente
Respuestas:
Una diferencia significativa entre INNER JOIN y NATURAL JOIN es el número de columnas devueltas.
Considerar:
El
INNER JOIN
de la Tabla A y la Tabla B en la columna 1 volveráEl
NATURAL JOIN
de TableA y TableB en Column1 devolverá:Se evita la columna repetida.
(AFAICT de la gramática estándar, no puede especificar las columnas de unión en una unión natural; la unión se basa estrictamente en el nombre. Consulte también Wikipedia ).
( Hay una trampa en la combinación interna producción, el trabajo
a.
yb.
las partes no estarían en los nombres de columna, sólo tendríacolumn1
,column2
,column1
,column3
como los encabezados. )fuente
NATURAL JOIN
arruinará exactamente , por qué es inesperado y en qué mundo estás?Customers
yEmployees
, uniéndoteEmployeeID
.Employees
También tiene unManagerID
campo. Todo está bien. Entonces, algún día, alguien agrega unManagerID
campo a laCustomers
tabla. Su unión no se romperá (eso sería una misericordia), sino que ahora incluirá un segundo campo y funcionará incorrectamente . Por lo tanto, un cambio aparentemente inofensivo puede romper algo solo distantemente relacionado. MUY MAL. La única ventaja de una unión natural es ahorrar un poco de mecanografía, y la desventaja es sustancial.SELECT * FROM TableA INNER JOIN TableB USING (Column1)
da 4 columnas. Esto no es correcto porqueSELECT * FROM TableA INNER JOIN TableB USING (Column1)
ySELECT * FROM TableA NATURAL JOIN TableB
son iguales, ambos dan 3 columnas.natural left
onatural right
) que asume que el criterio de combinación es donde las columnas con el mismo nombre en ambas tablas coincidenEvitaría usar combinaciones naturales como la peste, porque las combinaciones naturales son:
no essql estándar [SQL 92] y,por lo tanto, no esportátil, no es particularmente legible (por la mayoría de los codificadores de SQL) y posiblemente no sea compatible con varias herramientas / bibliotecasfuente
NATURAL JOIN Checkouts
"de aspecto casual solo son posibles cuando las convenciones de nombres de bases de datos son formales y se aplican ..."id
es omnipresente e inútil unirse; los nombres de clave foránea habituales sontablename_id
. Las uniones naturales son una mala, mala, mala idea.Una combinación natural es solo un atajo para evitar escribir, con la presunción de que la combinación es simple y coincide con campos del mismo nombre.
Es lo mismo que...
Sin embargo, lo que no puede hacer con el formato de acceso directo son combinaciones más complejas ...
fuente
NATURAL JOIN ... USING ()
:? El estándar esa NATURAL JOIN b
oa JOIN b USING (c)
room_number
, mientras que sus uniones internas tendrán dos columnas con nombreroom_number
.SQL no es fiel al modelo relacional de muchas maneras. El resultado de una consulta SQL no es una relación porque puede tener columnas con nombres duplicados, columnas 'anónimas' (sin nombre), filas duplicadas, nulos, etc. SQL no trata las tablas como relaciones porque se basa en el orden de las columnas, etc.
La idea detrás
NATURAL JOIN
de SQL es hacer que sea más fácil ser más fiel al modelo relacional. El resultado de lasNATURAL JOIN
dos tablas tendrá columnas desduplicadas por nombre, por lo tanto, no habrá columnas anónimas. Del mismo modo,UNION CORRESPONDING
yEXCEPT CORRESPONDING
se proporcionan para abordar la dependencia de SQL en el orden de las columnas en laUNION
sintaxis heredada .Sin embargo, como con todas las técnicas de programación, se requiere disciplina para ser útil. Uno de los requisitos para un éxito
NATURAL JOIN
es nombrar columnas consistentemente, porque las uniones están implícitas en columnas con los mismos nombres (es una pena que la sintaxis para renombrar columnas en SQL sea detallada, pero el efecto secundario es fomentar la disciplina al nombrar columnas en tablas base yVIEW
s :)Tenga en cuenta que un SQL
NATURAL JOIN
es un equi-join **, sin embargo, esto no es obstáculo para la utilidad. Tenga en cuenta que siNATURAL JOIN
fuera el único tipo de combinación admitido en SQL, aún estaría relacionalmente completo .Si bien es cierto que cualquiera
NATURAL JOIN
puede escribirse usandoINNER JOIN
y proyección (SELECT
), también es cierto que cualquieraINNER JOIN
puede escribirse usando producto (CROSS JOIN
) y restricción (WHERE
); Tenga en cuenta además que unaNATURAL JOIN
tabla entre sin nombres de columna en común dará el mismo resultado queCROSS JOIN
. Entonces, si solo le interesan los resultados que son relaciones (¡¿y por qué no ?!), entoncesNATURAL JOIN
es el único tipo de unión que necesita. Claro, es cierto que desde una perspectiva de diseño de lenguaje, las abreviaturas comoINNER JOIN
yCROSS JOIN
tienen su valor, pero también consideran que casi cualquier consulta SQL puede escribirse en 10 formas sintácticamente diferentes, pero semánticamente equivalentes, y esto es lo que hace que los optimizadores SQL sean tan difíciles desarrollar.Aquí hay algunas consultas de ejemplo (usando la base de datos habitual de partes y proveedores ) que son semánticamente equivalentes:
** La unión natural relacional no es un equijoin, es una proyección de uno. - filipina
fuente
Una
NATURAL
unión es solo una sintaxis corta para una unión específicaINNER
, o "equi-join", y, una vez que se desenvuelve la sintaxis, ambas representan la misma operación de álgebra relacional. No es un "tipo diferente" de unión, como en el caso deOUTER
(LEFT
/RIGHT
) oCROSS
uniones.Vea la sección equi-join en Wikipedia:
Es decir, todas las
NATURAL
combinaciones pueden escribirse comoINNER
combinaciones (pero lo contrario no es cierto). Para hacerlo, simplemente cree el predicado explícitamente , por ejemplo,USING
oON
- y, como señaló Jonathan Leffler, seleccione las columnas deseadas del conjunto de resultados para evitar "duplicados" si lo desea.Feliz codificación
(La
NATURAL
palabra clave también se puede aplicarLEFT
yRIGHT
unirse, y lo mismo se aplica. UnaNATURAL LEFT/RIGHT
combinación es solo una sintaxis corta para una combinación específicaLEFT/RIGHT
).fuente
Unión natural: es la combinación o el resultado combinado de todas las columnas de las dos tablas. Devolverá todas las filas de la primera tabla con respecto a la segunda tabla.
Unión interna: esta unión funcionará a menos que alguno de los nombres de columna sea sxame en dos tablas
fuente
Una unión natural es donde se unen 2 tablas sobre la base de todas las columnas comunes.
columna común: es una columna que tiene el mismo nombre en ambas tablas + tiene tipos de datos compatibles en ambas tablas. Puede usar solo = operador
Una unión interna es donde se unen 2 tablas sobre la base de columnas comunes mencionadas en la cláusula ON.
columna común: es una columna que tiene tipos de datos compatibles en ambas tablas pero no necesita tener el mismo nombre. Sólo se puede utilizar cualquier operador de comparación como
=
,<=
,>=
,<
,>
,<>
fuente
la diferencia es que int la unión interna (equi / default) y la unión natural que en la columna común de natuarl join se mostrará en un solo tiempo, pero la unión interna / equi / default / simple de la columna común se mostrará el doble de tiempo.
fuente
La unión interna y la unión natural son casi iguales, pero hay una ligera diferencia entre ellas. La diferencia está en la unión natural, no es necesario especificar la condición, pero en la condición de unión interna es obligatoria. Si especificamos la condición en la unión interna, las tablas resultantes son como un producto cartesiano.
fuente
UNIR INTERNAMENTE :
fuente
Unión interna, une dos tablas donde el nombre de la columna es el mismo.
Unión natural, une dos tablas donde el nombre de columna y los tipos de datos son iguales.
fuente
NATURAL JOIN
(como señalaron varias personas hace años) es uno donde los nombres de columna son los mismos. El tipo de datos no necesita ser el mismo. Los campos utilizados para unaINNER JOIN
necesidad no tienen el mismo nombre.