¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí

El lenguaje SQL aplicado a Access

El lenguaje SQL

El lenguaje SQL (Structured Query Language) es el lenguaje utilizado en Access para extraer, actualizar o eliminar datos que pertenecen a diferentes tablas de la base de datos. El objetivo de las siguientes secciones es explicar las diferentes estructuras y sintaxis que se pueden utilizar para este fin. Aunque se permite usar un amplio abanico de las instrucciones normalizadas SQL, Access y por extensión VBA no respetan la integridad de las funciones llamadas nativas de SQL.

El comando SELECT

La sintaxis general de una consulta SQL es la siguiente:


SELECT [DISTINCT o ALL] <* o lista de los Campos> 
FROM <Nombre de las Tablas> 
[WHERE <Predicados>] 
[GROUP BY orden de los grupos] 
[HAVING condición] 
[ORDER BY] <lista de los Campos>
 

La palabra clave DISTINCT permite visualizar solo resultados únicos, al contrario que los resultados duplicados que se mostrarán con la palabra clave ALL. Si no se utiliza ninguna de las dos palabras clave, se mostrarán datos repetidos.

Cuando se desea extraer datos de las tablas, es necesario simplemente listar los campos que se han de extraer.


SELECT Nombre, Apellido, Fecha_Nacimiento 
FROM T_Becarios
 

Los campos Nombre, Apellido y Fecha_Nacimiento, de la tabla T_Becarios, se mostrarán en el resultado. Cada campo seleccionado se separa del resto por una coma.

El símbolo * permite seleccionar todos los campos disponibles en las tablas que aparecen en la cláusula FROM.

El origen FROM

1. Sintaxis general

Las diferentes tablas disponibles en la base de datos de Access pueden servir de fuente de datos. Por lo tanto, cada tabla puede aparecer en la cláusula FROM, separada del resto de las tablas por una coma.


SELECT Nombre, Apellido, Empresa 
FROM T_Becarios, T_Empresas
 

2. Los joins

Es posible indicar en la consulta si se deben tener en cuenta algunas correspondencias entre las diferentes tablas. Hay tres tipos de correspondencias SQL en Access:


SELECT *  
FROM Tabla_1 [INNER o LEFT o RIGHT] JOIN Tabla_2 
ON <condiciones del join >
 

a. Join interno INNER JOIN

El join INNER JOIN permite tener en cuenta solo los registros para los que existe una correspondencia exacta entre las tablas.


SELECT Nombre, Apellido, Empresa 
FROM T_Becarios INNER JOIN T_Empresas 
ON T_Becarios.ID_Empresa = T_Empresas.ID_Empresa
 

b. Join externo LEFT JOIN

El join izquierdo externo LEFT JOIN permite visualizar todos los registros contenidos en la tabla de la izquierda (más abajo T_Becarios), incluso si no hay correspondencia en la tabla de la derecha (más abajo T_Empresas). De esta manera, se muestran todos los nombres y apellidos de becarios, incluso si no trabajan para ninguna empresa (caso de los jubilados, estudiantes y parados, por ejemplo).


SELECT Nombre, Apellido, Empresa  
FROM T_Becarios LEFT JOIN T_Empresas  
ON T_Becarios.ID_Empresa = T_Empresas.ID_Empresa
 

c. Join externo RIGHT JOIN...

La cláusula WHERE

En una consulta de extracción de datos, es posible aplicar algunos criterios de valores para filtrar los registros, según el valor de sus campos. Estos criterios se expresan en la cláusula WHERE de la consulta SQL.


SELECT Nombre, Apellido 
FROM T_Becarios 
WHERE Titulo = 'M.'
 

Esta consulta permite encontrar los nombres y los apellidos de los becarios, cuyo título es ’Sr.’ (señor).

1. Los diferentes criterios existentes

Es posible filtrar según varios criterios: igualdad (=), diferencia (<, >, <=, >=, <>), nulidad (Is Null), correspondencia de texto (LIKE), pertenencia a un intervalo (BETWEEN) o lista (IN), etc. Los diferentes criterios se pueden combinar entre ellos gracias a los operadores booleanos (AND, OR, XOR y NOT).

2. Algunos ejemplos

La siguiente consulta muestra los campos For_Tipo y For_Fecha de los registros de la tabla T_Formaciones, cuyas fechas For_Fecha están entre el 1 de enero de 2016 y el 1 de junio de 2016.


SELECT For_Tipo, For_Fecha 
FROM T_Formaciones 
WHERE For_Fecha BETWEEN #01/01/2016# AND #06/01/2016#
 

La siguiente consulta muestra los nombres y apellidos de los registros de la tabla T_Becarios cuyo Nombre empieza por A.


SELECT Nombre, Apellido  
FROM T_Becarios  
WHERE Nombre LIKE 'A*'
 

La siguiente consulta muestra los tipos y fecha de las formaciones, para los que el número máximo...

Los cálculos en las consultas

Es posible realizar cálculos sobre los datos a partir de las consultas SQL. Por ejemplo, determinar el número total de becarios por formación, o incluso el precio total que debe pagar una empresa por sus becarios.

Existen varias funciones en SQL (total COUNT, suma SUM, mínimo MIN, máximo MAX, etc.), que se completan con otras funciones directamente de VBA (Left, Right, Mid, DateSerial, etc.).

Por ejemplo, la siguiente consulta permite visualizar los nombres y las iniciales del apellido de todos los becarios.


SELECT Nombre, Left(Apellido,1) As Iniciales 
FROM T_Becarios
 

La cláusula GROUP BY

Cuando se hacen cálculos en una consulta, algunas veces es necesario agrupar los campos sobre los que no se hace ningún cálculo. El cálculo solo devolverá una única línea por grupo. Las agrupaciones se hacen con la cláusula GROUP BY

La siguiente consulta permite contar el número de formaciones por tipo de formación.


SELECT For_Tipo, COUNT(For_Tipo) AS Nb_Formacion  
FROM T_Formaciones  
GROUP BY For_Tipo
 

De manera general, todos los campos sobre los que no se hace ningún cálculo deben aparecer en la agrupación. Si omite un campo en la agrupación, Access se lo indicará cuando se ejecute la consulta.

La cláusula HAVING

Así como es posible filtrar los valores en los registros, también es posible aplicar criterios de filtro a los cálculos de agrupación. Para esto se usa la cláusula HAVING.

Por ejemplo, si solo se desea visualizar las formaciones cuyo número de participantes ha sido estrictamente superior a 5:


SELECT COUNT(ID_Becario), For_Tipo, For_Fecha  
FROM T_Becarios_Formaciones INNER JOIN T_Formaciones  
ON T_Becarios_Formaciones.ID_Formacion = T_Formaciones.FOR_ID  
GROUP BY For_Tipo, For_Fecha  
HAVING COUNT(ID_Becario) > 5
 

La cláusula ORDER BY

Durante la visualización de los datos resultantes de la consulta, es posible ordenarlos. La cláusula ORDER BY permite indicar en qué campos se desea realizar una ordenación. Es posible ordenar de dos maneras diferentes: creciente (ascendente), con la palabra clave ASC, y decrenciente (descendiente), con la palabra clave DESC. Si no se especifica ningún orden, el orden por defecto que se aplica es el creciente (ASC). Cada campo puede tener su propio orden.

La sintaxis SQL es la siguiente:


ORDER BY Campo_1 [ASC o DESC] [, Campo_2 [ASC o DESC]]
 

Por ejemplo, la siguiente consulta hará que aparezcan las formaciones por orden de fechas decrecientes y los tipos por orden alfabético (creciente).


SELECT For_Tipo, For_Fecha  
FROM T_Formaciones  
ORDER BY For_Fecha DESC, For_Tipo ASC
 

Los alias, el operador AS

Es posible añadir tantas columnas como se quiera en una consulta (con el límite de 255 campos máximo). Para esto se usa la palabra clave AS. Este operador también permite asignar un nombre a cómo queremos ver un campo calculado.

Ejemplo de alias utilizado para el número de formaciones por fecha:


SELECT COUNT(For_Fecha) AS Num_Formacion, For_Fecha As Fecha_Formacion 
FROM T_Formaciones   
GROUP BY For_Fecha 
 

El comando INSERT INTO

Además de las consultas de selección de datos, es posible realizar consultas, llamadas acciones, que se mencionarán en las siguientes secciones. La primera consulta de tipo acción posible es la de inserción de nuevos registros en las tablas. Este modo corresponde al modo Añadir en la interfaz de Access. Hay varios métodos para insertar nuevos datos.

1. Añadir un registro

En primer lugar, es posible añadir un registro único con la siguiente sintaxis:


INSERT INTO Tabla_Destino (<Lista de los Campos>) 
VALUES (<Lista de los Valores>)
 

La lista de los campos contiene los campos que se alimentarán, cada uno separado del resto, por una coma. A cada campo se le asignará un valor, que se corresponde con el valor de la lista de valores que aparece en el mismo orden.

Es necesario tener el mismo número de campos y valores asignados, y que los tipos de valores introducidos y su orden sea idéntico. En caso contrario, la consulta se interpretará incorrectamente, incluso Access la rechazará durante su ejecución.

Ejemplo de inserción de una nueva formación:


INSERT INTO T_Formaciones (For_Tipo, For_Fecha, For_Lugar, For_Duracion) 
VALUES ('VBA para Access 2016', #10/01/2016#, 'Sevilla' , 2)
 

2. Adición como resultado de una consulta

En caso de que quiera insertar registros a partir...

El comando SELECT INTO

De la misma manera que la consulta INSERT INTO va a añadir registros nuevos en una tabla existente, la consulta SELECT INTO va a crear una nueva tabla y añadir en ella los registros. La sintaxis general de este comando es la siguiente:


SELECT Campo_1 [, Campo_2] INTO TablaDestino  
FROM TablaOrigen  
[WHERE <lista de condiciones>]
 

Se va a crear una tabla TablaDestino sobre la marcha (si la tabla TablaDestino ya existe, aparecerá un mensaje de alerta indicando que ya existe y se eliminará). Cada campo de la consulta se creará en la tabla TablaDestino, y después se añadirán los registros del resultado de la consulta SELECT.

Ejemplo de consulta de inserción de las peticiones anteriores a 2010 en una tabla T_Peticiones_Archivadas:


SELECT * INTO T_Peticiones_Archivadas FROM T_Peticiones 
WHERE Pet_Fecha<=#01/01/2010#
 

El comando UPDATE

El comando UPDATE se utiliza para actualizar los datos ya presentes en las tablas. Este comando corresponde al tipo de consulta Actualización en Access 2016. También se trata de una consulta de tipo Acción. La sintaxis general de este comando es la siguiente:


UPDATE Tabla_MAY 
SET Campo_1=valor_1 [, Campo_2=Valor_2] 
[WHERE <lista de condiciones de actualización>]
 

Para cada registro que responde a las condiciones propuestas, se actualizará sus campos. Si no hay ninguna condición (no hay cláusula WHERE), se actualizan todos los registros.

Ejemplo de una consulta de actualización:


UPDATE T_Formaciones 
SET For_Lugar='Madrid' 
WHERE For_Tipo ='VBA para Access 2016' AND For_Fecha=#10/01/2016#
 

Esta consulta actualiza el lugar de la formación VBA para Access 2016, del día 1 de octubre del 2016 (antiguo lugar Sevilla, nuevo lugar Madrid).

El comando DELETE

El comando DELETE permite eliminar registros. Corresponde al tipo de consulta Eliminación de Access 2016. La sintaxis general es la siguiente:


DELETE * FROM Tabla_A_Vaciar 
[WHERE <lista de condiciones>]
 

Se eliminarán todos los registros de la tabla Tabla_A_Vaciar que se corresponden con las condiciones propuestas.

Ejemplo de consulta de eliminación de las peticiones anteriores a 2010:


DELETE * FROM T_Peticiones 
WHERE Pet_Fecha<=#01/01/2010#
 

Los otros comandos

La lista de comandos no se limita a la selección, inserción, actualización y eliminación. A continuación, se muestra la lista del resto de los comandos SQL añadidos por Access 2016.

1. Consulta de análisis cruzado

La consulta TRANSFORM crear una consulta de análisis cruzado. Se utiliza en el asistente de creación de la consulta.

2. Consulta de tipo Union

La sintaxis UNION permite fusionar el resultado de varias consultas cuyas estructuras y campos son idénticos

3. Creación/administración de una tabla

CREATE TABLE

Crea una nueva tabla.

ALTER TABLE

Modifica la estructura de una tabla.

DROP TABLE

Elimina una tabla.

CREATE INDEX

Crea un nuevo índice en una tabla existente.

DROP INDEX

Elimina un índice.

4. Creación/administración de los usuarios y los grupos

Usuarios

CREATE USER

Crea uno o varios usuarios nuevos.

ADD USER

Añade un usuario a un grupo de usuarios existente.

DROP USER

Elimina uno o varios usuarios.

Grupos

CREATE GROUP

Crea uno o varios grupos de usuarios nuevos.

DROP GROUP

Elimina uno o varios grupos existentes.

Permisos

GRANT

Da permisos concretos a un usuario o a un grupo de usuarios existente.

REVOKE

Retira permisos concretos a un usuario o a un grupo de usuarios existente.

Cada uno de estos comandos se explica en la ayuda de Access (tecla [F1]).