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:
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.
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:
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;
Además, en Access podemos emplear dos variantes para relaciones más personalizadas: INNER LEFT e INNER RIGHT.
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:
Acerca del autor