Archivo de etiquetas consultas

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

PorLucía Montero Rodríguez

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.

PorLucía Montero Rodríguez

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.

PorLucía Montero Rodríguez

¿Cómo puedo consultar datos de varias tablas al mismo tiempo?

En mi humilde opinión, creo que las consultas representan la herramienta más potente que tiene Access, ya que nos permite obtener distintas informaciones más o menos complejas y personalizables de manera rápida.

En este sentido, iremos desgranando las posibilidades que la aplicación nos ofrece en diversos artículos, pero esta vez comenzamos por las consultas de selección simples, que son aquéllas en las que nos limitamos a tomar datos que se encuentran ubicados en distintas tablas y a combinarlos entre sí.

Para nuestro ejemplo, vamos a utilizar la base de datos librería.mdb, que puedes descargar haciendo clic en el nombre de la misma, y cuyo esquema de relaciones mostramos a continuación.

Relaciones entre las tablas de la base de datos Liberia

Según el esquema mostrado, si consultamos la tabla Facturas, no veríamos, por ejemplo,  ni el nombre del cliente ni el título o el precio del libro que ha comprado. Pues bien, para hacerlo posible, definiremos una consulta simple.

Comenzamos a través de la cinta Crear, pulsando el icono Diseño de consulta, situado a la derecha de la misma. Tras esta operación, Access muestra el cuadro de diálogo Mostrar tabla, donde haremos doble clic en las tablas que tienen los campos que nos interesan, en este caso:FacturasClientes y Libros. Luego, pulsamos Cerrar. Si has seguido estos pasos, la pantalla de Access será similar a la siguiente:

Tablas preparadas para crear una consulta

En la parte superior de la imagen aparecen las tablas que hemos añadido, y en la inferior tendremos que ubicar los campos que nos interesan. Si por casualidad no  tuvieras todas las tablas necesarias, no te preocupes, si miras la parte superior de la pantalla, en la cinta Diseño, tienes el botón Mostrar tabla, con el que podrás solucionar el problema. De manera similar, si has repetido alguna, haz un clic en la barra de título de la tabla y luego en el teclado pulsa Supr.

Para indicar qué campos queremos ver, la forma más fácil es hacer doble clic en cada uno de ellos, entonces se irán añadiendo de izquierda a derecha en la parte inferior de la pantalla. Mira la imagen, y verás que hemos propuesto que aparezcan el número de la factura, la fecha, el nombre y apellidos del cliente, así como el título y el precio del libro:

Definición de consulta simple

Para ver el resultado final, pulsa el botón Ejecutar, que puedes encontrar con la imagen de un signo de admiración rojo !, a la izquierda de la cinta Diseño. El efecto en pantalla debería ser parecido al que ahora te mostramos:

Resultado de la consulta

En próximos artículos veremos cómo podemos mejorar y afinar los resultados, espero no defraudar.