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

SQL: consultas de selección con criterios

En el artículo Primeros pasos con SQL  vimos la forma más básica de crear una consulta utilizando este lenguaje. Ahora vamos a restringir el ámbito de selección de registros estableciendo para ello distintas condiciones.

La instrucción WHERE

Esta orden es la que debemos emplear en conjunción con las anteriores para indicar qué registros nos interesa visualizar.

Utilizando nuestra ya conocida base de datos librería, vamos a escribir una consulta que muestre el Código, Título y Precio de todos los libros con un importe inferior a 25 euros, ordenados de mayor a menor.

La solución será la siguiente, y para ver el resultado pulsa Ejecutar en la cinta contextual Diseño:

SELECT codlibro, titulo, precio
FROM libros
WHERE precio<25
ORDER BY precio DESC;

Tras ejecutarla, el resultado que obtengas debería ser similar al que ahora puedes ver en la figura:

Resultado de consulta SQL con criterio simple

El orden de los factores sí altera el producto final en SQL

Debes tener en cuenta el orden en el que figuran las instrucciones ya que es fundamental mantenerlo para que no se produzcan errores. Fíjate en los distintos pasos:

  1. indicar los campos a mostrar,
  2. especificar las tablas de las que proceden,
  3. establecer las condiciones y,
  4. asignar los criterios de ordenación.

Criterios múltiples

Si sólo pudiéramos establecer condiciones simples, SQL no sería de mucha ayuda. Afortunadamente podemos indicar varios criterios, combinándolos en una única orden WHERE. Por ejemplo, vamos a realizar una variación de la consulta anterior, para que ahora aparezcan los libros cuyo precio se sitúe entre 10 y 30 euros.

Podríamos emplear cualquiera de estas opciones:

SELECT codlibro, titulo, precio
FROM libros
WHERE precio BETWEEN 10 AND 30
ORDER BY precio DESC;
SELECT codlibro, titulo, precio
FROM libros
WHERE (precio >= 10) AND (precio <= 30)
ORDER BY precio DESC;

El resultado es el mismo en ambos casos: 5 registros, pero si te fijas bien hay diferencias a la hora de escribir la instrucción. Con el criterio BETWEEN sólo se indica una vez el nombre del campo. Esto es así porque SQL lo toma como una única condición. En el segundo caso, es necesario especificar los distintos filtros de manera independiente, es decir, cada uno con su nombre de campo y su juego de paréntesis.

De momento, esto es todo; en la siguiente entrada dedicada a SQL, veremos cómo mostrar/utilizar campos situados en tablas distintas.

Primeros pasos con SQL

Llegados a este punto, verás que el primer icono de la cinta contextual es SQL, pulsa para entrar en el cuadro de creación. De todas formas, también puedes acceder desde el minibotón situado en la esquina inferior derecha de la aplicación.

Sentencias básicas con SQL

Dos, sin dudarlo, SELECT y FROM, de uso obligado para todas aquellas consultas que sirvan para mostrar datos en pantalla.

SELECT campo1,campo2…

indica qué campos deseas mostrar separados entre sí por comas

FROM tabla

especifica de qué tabla provienen los mismos

Por ejemplo, si tomamos como referencia una vez más la base de datos librería, y cuyo esquema de relaciones mostramos a continuación, vamos a escribir una consulta que muestre el Código, Título y Precio de cada libro.

Relaciones de la base de datos libreria

Para empezar a escribir una consulta SQL, en la cinta Crear haz clic en Diseño de consulta. A continuación, cierra el cuadro Mostrar tabla. Después, utiliza el primer botón de la cinta, SQL y escribe el siguiente código.

 SELECT codlibro, titulo, precio
FROM libros;

Al pulsar Ejecutar verás el resultado:

Consulta SQL de selección

Un detalle a tener en cuenta, es que si el nombre del campo contiene espacios, éste deberá escribirse entre corchetes; por ejemplo en caso de querer utilizar un campo denominado [descuento maximo].

Mejorar el aspecto de salida

A través de dos clausulas adicionales podemos modificar fácilmente el formato del resultado; son las siguientes:

AS titulo

tras el nombre de un campo, se usa para especificar el título que aparecerá como encabezado de la columna correspondiente

ORDER BY campo

muestra el listado ordenado por dicho campo

Mira esta variante de la consulta anterior y su posterior resultado:

SELECT codlibro AS Código, titulo AS Título, precio AS PVP
FROM libros
ORDER BY precio;

Consulta SQL de selección ordenada

Como ves, por defecto el orden se aplica de la A a la Z o de menor a mayor, si lo deseas a la inversa:

SELECT codlibro AS Código, titulo AS Título, precio AS PVP
FROM libros
ORDER BY precio DESC;

Hasta aquí nuestro primer artículo dedicado a las consultas SQL, en futuras entradas iremos viendo qué posibilidades nos ofrece este lenguaje.

Accede a una base de datos a través del Panel de control

En el último artículo dedicado a Access vimos cómo Construir un panel de control. Sin embargo, para que éste sea realmente útil, necesitaremos activarlo y cerrar el resto de la base de datos. De esta forma, el usuario sólo podrá acceder a los elementos que se incluyan en el Formulario de inicio.

Panel de control = Puerta de acceso

Para llevar a cabo el proceso en Access 2010 haremos clic en Opciones dentro del menú Archivo. La clave de todo lo que nos interesa definir en ese momento se encuentra en la categoría Base de datos actual.

Las características que aparecen al comienzo del apartado Opciones de aplicación resultarán básicas:

  • Título de la aplicación: Literal que aparecerá en la Barra de título de Access
  • Icono de la aplicación: Icono personalizado. Recuerda que deber ser un archivo gráfico con extensión ico o bmp.
  • Mostrar formulario: Aquí es donde elegiremos nuestro Panel de control.

Debe quedar claro que estas son las opciones mínimas recomendables. Pero si queremos restringir la utilización de los diferentes elementos de la base de datos, no son suficientes. Para proteger/cerrar el acceso a la misma, avanzaremos en el cuadro de diálogo hasta el apartado Navegación.

Opciones de Access para activar un Panel de Control

Desactivamos Mostrar panel de navegación, así como los menús no restringidos y contextuales. Al hacerlo, hemos limitado el uso de la mayoría de funciones que Access nos ofrece de manera general.

Opciones para restringir el acceso a la mayoría de funciones de Access

Ahora sólo queda Aceptar los cambios. Entonces, Access mostrará un mensaje indicando que es necesario cerrar y volver a abrir la base de datos para que éstos se activen.

El Panel de control en acción

Tras la reapertura, esta es la imagen que Access nos ofrece. Como puedes ver sólo se muestra el Panel de control, y prácticamente no hay opciones disponibles para crear o modificar elementos, ni siquiera para cambiar de vista.

Panel de control como acceso a una base de datos en Access

Un dato a tener en cuenta, es que ahora mismo es posible acceder de nuevo a las Opciones de privacidad en Archivo y restaurar la “estructura habitual de la aplicación”.

En un entorno profesional, este formulario se suele crear sobre un clon o espejo de la base de datos real, y normalmente, se diseña y activa una cinta personalizada con las opciones que sí vamos a permitir.

A partir de ahora, ¿cómo vas a proteger tus bases de datos de otros usuarios?

Tu base de datos, mejor con Panel de Control

Es relativamente habitual construir una base de datos para que sea manejada por otras personas, generalmente con menos conocimientos. En tal caso, nos interesa limitar el acceso a los distintos objetos y datos. De esta forma, minimizamos la posibilidad de cometer un error en caso de no contar con suficientes conocimientos.

Una buena opción pasa por crear un formulario que actúe como Panel de control o Formulario de Inicio. En el mismo, incluiremos botones o enlaces a las tablas, consultas, informes… que nos interesen.

Tu base de datos, mejor con Panel de Control

A continuación vamos a ver cómo llevar a cabo ese proceso de manera general, tomando como punto de partida la base de datos Catering.

Punto de partida

Dado que la ventana o formulario de inicio no mostrará dato alguno, lo ideal es comenzar partiendo completamente desde cero; es decir, con el botón Formulario en blanco de la cinta Crear:

Formulario en blanco

Como se aprecia en la figura, Access inserta un formulario con el fondo en blanco pero preparado para mostrar información, ya que puedes ver que incluye el selector de registros a la izquierda y los botones de navegación en la parte inferior.

Por lo tanto, una de nuestras tareas será configurar correctamente las Propiedades de Formato, para que estos elementos desaparezcan y el resto se adapten a lo que necesitemos.

Un poco de diseño

Para comenzar a dar un aspecto más llamativo a nuestro panel de control, hemos activado la vista Diseño. Una vez allí, en el menú contextual del ratón hemos pulsado Encabezado o pie de formulario. Después hemos reducido el espacio inferior ya que no deseamos mostrar dicha sección, aunque también puedes pedir sus propiedades e indicar No en Visible.

Formulario en blanco con encabezado activado

A continuación, hemos asignado colores diferentes al Encabezado y a la zona de Detalle y, con la herramienta Etiqueta, hemos colocado el nombre de la empresa en el espacio superior. Además, se han configurado distintas propiedades de formato y asignado nombre. El resultado previo puedes verlo a continuación:

Panel de control de Access sin botones

Acceso a elementos

Una vez preparada la base ya sólo nos quedará insertar los diferentes botones, etiquetas…. Es decir, los distintos controles que permitirán al usuario de la base de datos acceder a las tablas, formularios, consultas…

Si no tienes práctica suficiente para crear tus propias macros y asociarlas con botones de comando, recuerda que Access te puede ayudar con sus asistentes. Por ejemplo, vamos a efectuar esta operación para incorporar un botón que abra el formulario de Eventos.

Comprueba si tienes la varita mágica lista para su uso en la cinta de Diseño, será así si el icono aparece enmarcado en un rectángulo naranja. Si no fuera el caso, sólo tienes que pulsarlo. Ahora, haz clic sobre Botón y dibuja en el formulario el tamaño deseado; al soltar el ratón, Access iniciará el asistente.

Asistente para botones en Access

En la categoría Operaciones con formularios, hacemos click en Abrir formulario y pulsa Siguiente. Tras elegir el formulario Eventos y pulsar Siguiente, indicamos que deseamos mostrar todos los registros y avanzamos. Especificamos el texto Eventos y pulsamos en Finalizar, ya que no deseamos modificar el nombre automático asignado al control.

De esta forma, puedes insertar atajos para abrir formularios, ejecutar consultas, imprimir informes…, en fin todo lo que vayas a permitir que se haga desde este panel de control.

Tras añadir más botones, marcos y etiquetas decorativas, aquí tienes nuestra propuesta final.

Ejemplo de Panel de Control en Access

En el siguiente artículo, veremos cómo activar el Panel de Control para que se muestre automáticamente al abrir la base de datos y no se muestre el resto de objetos.