SQL: utilizar campos situados en tablas distintas

PorLucía Montero Rodríguez

SQL: utilizar campos situados en tablas distintas

Como lo prometido es deuda, tras un breve parón, retomamos nuestro tutorial de Access para ver cómo podemos mostrar mediante SQL campos que se encuentran situados en diferentes tablas relacionadas entre sí. Para practicar, emplearemos como ya es habitual nuestra base de datos librería.mdb.

Comenzaremos por algo sencillo, simplemente una consulta que muestre el Nombre, Apellidos y Provincia de cada cliente; pero primero vamos a recordar las relaciones existentes en la base de datos:

Relaciones de la base de datos Libreria

La clave para que la consulta funcione correctamente reside en la forma de indicar qué campos de ambas tablas forman la relación. Para ello, podemos emplear dos opciones diferentes. Pero eso es algo que indicaremos tras especificar los campos y tablas que deseamos utilizar.

Relaciones mediante WHERE

Tras la cláusula FROM emplearemos la instrucción WHERE para indicar qué campos deben coincidir entre sí. Por ejemplo:

SELECT clientes.nombre,clientes.apellidos,ciudades.nombre

FROM clientes,ciudades

WHERE clientes.codciudad=ciudades.codciudad;

Como en este caso, teníamos dos campos con la misma denominación (Nombre) ha sido necesario anteponer la tabla para indicar con cuál exactamente queríamos trabajar. El resultado debe ser similar al que ahora mostramos en la figura:

Consulta SQL entre tablas relacionadas mediante WHERE

Relaciones mediante INNER JOIN

Si empleamos la versión SQL en Access, podemos utilizar la instrucción INNER JOIN para indicar la relación existente, dejando WHERE para establecer criterios de filtrado adicionales; por ejemplo para el caso anterior:

SELECT clientes.nombre,clientes.apellidos,ciudades.nombre

FROM clientes

INNER JOIN ciudades ON clientes.codciudad=ciudades.codciudad;

Fíjate bien porque hay cambios. Ahora en FROM sólo hemos indicado una de las tablas (Clientes), la otra se especifica tras INNER JOIN (ciudades) y tras ON debemos establecer los campos a coincidir.

Por supuesto, el resultado final es el mismo que en el primer caso, pero podemos mejorarlo un poquito recordando que AS nos permite incluir títulos de columnas. Por ejemplo:

SELECT clientes.nombre AS Nombre,clientes.apellidos AS Apellidos,ciudades.nombre AS Ciudad

FROM clientes

INNER JOIN ciudades ON clientes.codciudad=ciudades.codciudad;

Consulta SQL entre tablas relacionadas con título de columnas mediante INNER JOIN

Además, en Access podemos emplear dos variantes para relaciones más personalizadas: INNER LEFT e INNER RIGHT.

Relaciones y criterios

Vamos a complicar ligeramente el supuesto anterior, ya que ahora sólo nos interesa mostrar los clientes de Sevilla o de Cádiz, por lo que deberemos añadir el filtro.

Para el primer caso, con la instrucción WHERE, necesitaremos escribir la condición que añadiremos a la anterior mediante AND:

SELECT clientes.nombre AS Nombre,clientes.apellidos AS Apellidos,ciudades.nombre AS Ciudad

FROM clientes,ciudades

WHERE (clientes.codciudad=ciudades.codciudad) AND (ciudades.nombre IN("Sevilla","Cádiz"));

Mediante INNER JOIN sólo tendremos que incluir tras la misma la instrucción WHERE correspondiente, tal y como vimos en la entrada dedicada a Consultas SQL de selección con criterios, quedando su escritura como te mostramos a continuación:

SELECT clientes.nombre AS Nombre,clientes.apellidos AS Apellidos,ciudades.nombre AS Ciudad

FROM clientes

INNER JOIN ciudades ON clientes.codciudad=ciudades.codciudad

WHERE ciudades.nombre IN("Sevilla","Cádiz");

En ambos casos, el resultado sólo mostrará cuatro registros que cumplen la condición especificada:Consulta SQL entre tablas relacionadas con criterio usando INNER JOIN y WHERE

Utiliza SQL para relacionar con facilidad campos con diferentes orígenes

Acerca del autor

Lucía Montero Rodríguez administrator

2 comments so far

Luis PeñaPublicado en11:12 pm - Ago 23, 2021

Sencillo y excelente!

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.