¿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 JOINde la Tabla A y la Tabla B en la columna 1 volveráEl
NATURAL JOINde 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,column3como los encabezados. )fuente
NATURAL JOINarruinará exactamente , por qué es inesperado y en qué mundo estás?CustomersyEmployees, uniéndoteEmployeeID.EmployeesTambién tiene unManagerIDcampo. Todo está bien. Entonces, algún día, alguien agrega unManagerIDcampo a laCustomerstabla. 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 TableBson iguales, ambos dan 3 columnas.natural leftonatural 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 ..."ides 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 boa 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 JOINde SQL es hacer que sea más fácil ser más fiel al modelo relacional. El resultado de lasNATURAL JOINdos tablas tendrá columnas desduplicadas por nombre, por lo tanto, no habrá columnas anónimas. Del mismo modo,UNION CORRESPONDINGyEXCEPT CORRESPONDINGse proporcionan para abordar la dependencia de SQL en el orden de las columnas en laUNIONsintaxis 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 JOINes 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 yVIEWs :)Tenga en cuenta que un SQL
NATURAL JOINes un equi-join **, sin embargo, esto no es obstáculo para la utilidad. Tenga en cuenta que siNATURAL JOINfuera el único tipo de combinación admitido en SQL, aún estaría relacionalmente completo .Si bien es cierto que cualquiera
NATURAL JOINpuede escribirse usandoINNER JOINy proyección (SELECT), también es cierto que cualquieraINNER JOINpuede escribirse usando producto (CROSS JOIN) y restricción (WHERE); Tenga en cuenta además que unaNATURAL JOINtabla 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 JOINes el único tipo de unión que necesita. Claro, es cierto que desde una perspectiva de diseño de lenguaje, las abreviaturas comoINNER JOINyCROSS JOINtienen 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
NATURALunió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) oCROSSuniones.Vea la sección equi-join en Wikipedia:
Es decir, todas las
NATURALcombinaciones pueden escribirse comoINNERcombinaciones (pero lo contrario no es cierto). Para hacerlo, simplemente cree el predicado explícitamente , por ejemplo,USINGoON- y, como señaló Jonathan Leffler, seleccione las columnas deseadas del conjunto de resultados para evitar "duplicados" si lo desea.Feliz codificación
(La
NATURALpalabra clave también se puede aplicarLEFTyRIGHTunirse, y lo mismo se aplica. UnaNATURAL LEFT/RIGHTcombinació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 JOINnecesidad no tienen el mismo nombre.