Acceder a datos relacionados en varias tablas de BBDD en SQL

Cuando hay que implementar una Base de datos, lo mas importante es el modelo conceptual. Es decir el diseño general de las tablas: número de tablas, campos por tabla, relaciones entre las tablas, claves primarias, claves foráneas, etc… Cuando relacionamos campos de diferentes tablas y el hecho de escoger los campos adecuados es cuando se debe tener cuidado de que las relaciones funcionen. Entre tablas pueden haber diferentes tipos de relaciones:

  • Relación 1 a  1: Cada registro de la tabla origen sólo puede tener asociado un registro de la tabla destino y viceversa.
  • Relacion 1a N: Cada registro de la tabla origen puede estar asociado a varios registros de la tabla destino, pero en cambio cada registro de la tabla destino solo puede estar asociado a un registro de la tabla origen.
  • Relación N a N: Cada registro de la tabla origen puede estar  asociado a varios registros de la tabla destino. Cada registro de la tabla destino  también puede estar relacionado con varios registro de la tabla origen.

Estos son a grandes rasgos los tipos de relaciones que nos podemos encontrar en lo que se refiere a BBDD.

Vamos a poner un ejemplo para ver como se usan estas relaciones en un caso real de modelo de base de datos. Si disponemos de una tabla de clientes y almacenamos un codigoCli para identificarlo. Entonces en la tabla facturas podremos relacionar las facturas y los clientes almacenando el campo codigoCli enla tabla facturas. Mediante este código podemos obtener todos los datos del cliente, almacenados en la tabla clientes, referenciado en la tabla facturas. Para poder acceder a estos datos sql nos permite hacerlo con la sentencia JOIN. En concreto INNER JOIN, LEFT JOIN, RIGHT JOIN.

La sentencia INNER JOIN es el cálculo cruzado de registros, cada registro de la tabla 1 es combinado con cada registro de la tabla 2. Pero solo permanecen los registros en la tabla combinada que cumplan la condición que se especifique en el WHERE de la sentencia. Esta es la sentencia más usada y por lo tanto es la que se usa por defecto.

SELECT *
FROM Clientes
INNER JOIN Facturas
ON Clientes.codigoCliente =
Facturas.codigoCliente

Con esta consulta obtendremos todos los datos de los clientes con los que existe una correspondencia entre el codigo del propio cliente y este codigo en las facturas.

Las operaciones con INNER JOIN pueden ser consideradas como cruzadas, naturales y de equivalencia.

Después tambien tenemo la sentencia OUTER JOIN, que en este caso no es necesario que los registros de la tabla 1 y la tabla 2 tengan una correspondencia, el registro es mantenido en la tabla combinada si no existe un registro que lo corresponda.

Despues tendremos las sentencias LEFT JOIN y RIGHT JOIN. En el primer caso mantenemos los datos de la primera tabla aunque no tengan correspondencia con la segunda. El RIGHT JOIN hace lo contrario, se trae los datos dela segunda tabla aunque no tenga correspondencia con la primera tabla. Podemos usar tanto una como la otra, dependiendo de la forma de trabajara la que estemos acostumbrados. A continuación adjunto un gráfico para poder ver de un modo ilustrativo el funcionamiento de este tipo de sentencias o más bien el tipo de resultados obtenidos.

Con  este tipo de sentencias se pueden hacer modelos conceptuales sin repetir datos, pero teniendo acceso a ellos usando las tablas que te den la relación correcta.

Dejar un comentario

*