Cada resultado de una operación SQL es funcionalmente una nueva tabla, ya sea que esté o no almacenada en el disco o en la memoria
La función de una combinación es "Unir" dos tablas juntas en una tercera tabla sintética que (por lo general) solo existe en la memoria durante el tiempo que se envía a la aplicación.
La razón para usar una combinación es reducir las anomalías de datos , asegurando que los datos aparezcan en un solo lugar en la base de datos.
Considera lo siguiente:
Person ( ID Integer Primary Key, FName String, LName String, Address String, City String, ZipCode String)
Aquí, cada vez que el gobierno cambie los códigos postales (lo que sucede con demasiada frecuencia para los gustos de los desarrolladores de bases de datos *), la tabla de personas deberá actualizarse de modo que todos los códigos postales antiguos pertenezcan correctamente a la ciudad correcta y al nuevo código postal.
En este caso, el mismo código postal está en múltiples tuplas de la tabla, y si la tabla es editable manualmente, estará sujeto a graves anomalías de actualización a medida que se ingresen nuevas combinaciones de ciudad / código postal sin que se actualice la base de datos en su conjunto.
Al tener tres tablas en su lugar, obtenemos los mismos datos, pero con mayor flexibilidad y confiabilidad (a costa de cierto rendimiento, aunque las preguntas de "desnormalización apropiada" son un tema para otra serie de respuestas).
Person ( PersonID Integer Primary Key, FName String, LName String)
City ( CityID Integer Primary Key, City String, State String, ZipCode String )
Address ( AddressID Integer Primary Key, AddressLine1 String, CityID Integer References City, PersonID Integer References Person)`
Y podemos obtener una sola "tabla" de lo anterior a través de la siguiente consulta:
SELECT Fname, Lname, AddressLine1, City, State, ZipCode
FROM Person
INNER JOIN Address USING (PersonID)
INNER JOIN City USING (CityID)
Esto nos permite actualizar las tablas individuales siempre que cambie algo específico sobre ellas, sin corromper el resto de los datos asociados.
Un INNER JOIN
es el tipo predeterminado de unión. En términos generales, señala: "combinar tuplas donde este registro de la tabla a coincide con este registro de la tabla b" Los otros tipos de combinaciones son OUTER JOINS
y lo que se conoce como a CARTESIAN PRODUCT
. Una combinación externa es "Tome todo de la tabla izquierda o derecha (como se especifica) y donde coincida la otra tabla, únala. Donde no coincida, llénela con valores nulos" Y un producto cartesiano (sin entrar en el álgebra relacional es: Tome todas las combinaciones posibles de tuplas en ambas tablas y envíelas a una tabla, sin que coincida nada.
* Más que nunca, especialmente en el caso de mover los límites de los códigos postales debido a la gerrymandering