Diferencia entre unión natural y unión interna

Resuelto smith asked hace 12 años • 12 respuestas

¿Cuál es la diferencia entre una unión natural y una unión interna?

smith avatar Jan 02 '12 06:01 smith
Aceptado

Una diferencia significativa entre INNER JOIN y NATURAL JOIN es el número de columnas devueltas.

Considerar:

TableA                           TableB
+------------+----------+        +--------------------+    
|Column1     | Column2  |        |Column1  |  Column3 |
+-----------------------+        +--------------------+
| 1          |  2       |        | 1       |   3      |
+------------+----------+        +---------+----------+

La INNER JOINtabla A y la tabla B en la columna 1 volverán

SELECT * FROM TableA AS a INNER JOIN TableB AS b USING (Column1);
SELECT * FROM TableA AS a INNER JOIN TableB AS b ON a.Column1 = b.Column1;
+------------+-----------+---------------------+    
| a.Column1  | a.Column2 | b.Column1| b.Column3|
+------------------------+---------------------+
| 1          |  2        | 1        |   3      |
+------------+-----------+----------+----------+

La NATURAL JOINtabla A y la tabla B en la columna 1 devolverán:

SELECT * FROM TableA NATURAL JOIN TableB
+------------+----------+----------+    
|Column1     | Column2  | Column3  |
+-----------------------+----------+
| 1          |  2       |   3      |
+------------+----------+----------+

Se evita la columna repetida.

(AFAICT de la gramática estándar, no se pueden 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 un truco en la salida de la unión interna; las partes a.y no estarían en los nombres de las columnas; solo b.tendrías column1, column2, como encabezados.column1column3 )

Jonathan Leffler avatar Jan 01 '2012 23:01 Jonathan Leffler
  • Una combinación interna es aquella en la que se requiere la fila coincidente en la tabla unida para que se devuelva una fila de la primera tabla.
  • Una combinación externa es aquella en la que no se requiere la fila coincidente en la tabla unida para que se devuelva una fila de la primera tabla.
  • Una combinación natural es una combinación (puede tener natural lefto natural right) que asume que los criterios de combinación son donde coinciden las columnas con el mismo nombre en ambas tablas.

Yo evitaría usar uniones naturales como la peste, porque las uniones naturales son:

  • No es SQL estándar [SQL 92] y, por lo tanto, no es portátil, no es particularmente legible (para la mayoría de los codificadores de SQL) y posiblemente no sea compatible con varias herramientas/bibliotecas.
  • no informativo; no se puede saber en qué columnas se están uniendo sin consultar el esquema
  • sus condiciones de unión son invisiblemente vulnerables a los cambios de esquema: si hay varias columnas de unión natural y una de esas columnas se elimina de una tabla, la consulta aún se ejecutará, pero probablemente no correctamente y este cambio de comportamiento será silencioso
  • apenas vale la pena el esfuerzo; sólo estás ahorrando unos 10 segundos de escritura
Bohemian avatar Jan 01 '2012 23:01 Bohemian