Você está na página 1de 31

SQL EN ACCESS

Consultas de Acción
Consultas SQL de Acción

Las consultas de acción o manipulación de datos son


aquellas que no devuelven ningún registro, son las
encargadas de acciones como añadir, borrar y modificar
registros. Para poder hacer esto, SLQ nos ofrece las
siguientes sentencias:
•INSERT para insertar datos en registros de tablas
•UPDATE para modificar o actualizar registros de las
tablas
•DELETE para borrar registros de las tablas
Consultas SQL de Acción
DELETE
Elimina los registros de una o más de las tablas listadas en la cláusula
FROM que satisfagan la cláusula WHERE. Esta consulta elimina los registros
completos, no es posible eliminar el contenido de algún campo en
concreto.
Sintaxis para Access: DELETE * FROM nombre_tabla
[WHERE Condiciones];
En una instrucción DELETE con múltiples tablas, debe incluir el nombre
de tabla (Tabla.*)
DELETE tabla.* FROM nombre_tabla
[WHERE Condiciones];
Consultas SQL de Acción
DELETE
Las operaciones de eliminación en
cascada en una consulta únicamente
eliminan o afectan a los registros del
lado varios de una relación.
Supongamos que la tabla fotógrafos está
relacionada con la tabla fotografías mediante
una relación uno a varios, para ello hemos
incluido en la tabla fotografías el idfotografo
como campo clave externa, y hemos
relacionado ambas tablas exigiendo
Integridad referencial y hemos activado la
opción Eliminar en Cascada.
Consultas SQL de Acción
DELETE
En la tabla fotografías introducimos los
siguientes registros:

En la tabla fotógrafos eliminamos el


registro 2 (Rosa Marcos), porque es un
fotógrafo que ya no trabaja con nosotros.

Access nos indica un mensaje de


advertencia, indicando que también
vamos a eliminar los registros
dependientes en la tabla relacionada
(fotografías)
Consultas SQL de Acción
DELETE
Al indicar Si, los registros se eliminarán
tanto de la tabla 1 de la relación
(fotógrafos) como de la tabla varios
(fotografías).
Resultado en la tabla Fotógrafos:

Resultado en la tabla Fotógrafías:


Consultas SQL de Acción
DELETE
Ejem1. Consulta ELIMINACIÓN que borra los empleados con cargo
Representante de Ventas de la tabla CopiaEmpleados
Consulta de Selección
SELECT *
FROM CopiaEmpleados
WHERE Cargo='Representante de Ventas';

Consulta de Eliminación

DELETE *
FROM CopiaEmpleados
WHERE Cargo='Representante de Ventas';
Consultas SQL de Acción
DELETE
Ejem2. Borrado en cascada. Hacer copias de Empleados y Pedidos. Relacionar
ambas tablas sin marcar la opción Eliminar en Cascada los registros relacionados.
Probar la consulta.
Enseguida modificar la relación marcando Eliminar en cascada los registros
relacionados. Ejecutar la consulta y comprobar los resultados.
DELETE *
FROM CopiaEmpleados
WHERE Cargo = 'Gerente de Ventas';

Por parámetros: La siguiente consulta pide el cargo por parámetros:


DELETE *
FROM CopiaEmpleados
WHERE Cargo = [Registros que coincidan con este cargo se eliminarán];
Consultas SQL de Acción
DELETE
Ejer1. Abrir la BD CuentaPrestamos.accdb y borrar de la tabla BancoNew
todos los registros.
DELETE *
FROM

Ejer2. De la tabla Banco, borrar el registro que corresponde al código de


banco: B20 .
DELETE *
FROM
WHERE
Consultas SQL de Acción
INSERT
La sentencia INSERT INTO Agrega un registro en una tabla. Se la
conoce como una consulta de datos añadidos. Esta consulta puede ser de
dos tipos: Insertar un único registro ó Insertar en una tabla los registros
contenidos en otra tabla.
Sintaxis para insertar un único registro:

INSERT INTO Tabla (campo1, campo2, .., campoN) VALUES (valor1,


valor2, ..., valorN);
Tabla es el nombre de la tabla donde vamos a insertar la fila también
se puede utilizar un nombre de consulta, consulta que tenga como
origen de datos una única tabla. Al nombre de la tabla se le puede añadir
la cláusula IN si la tabla se encuentra en otra base de datos (en una base
de datos externa).
Consultas SQL de Acción
INSERT
Sintaxis para insertar un único registro:
INSERT INTO Tabla (campo1, campo2, .., campoN) VALUES (valor1,
valor2, ..., valorN);

La palabra reservada VALUES se puede sustituir por la palabra SELECT (en otros
SQLs se emplea únicamente VALUES).
A continuación de la palabra VALUES, entre paréntesis se escriben los
valores que queremos añadir. Estos valores se tienen que escribir de acuerdo
al tipo de dato de la columna donde se van a insertar (encerrados entre
comillas simples ' ' para valores de tipo texto, entre # # para valores de
fecha...) la asignación de valores se realiza por posición, el primer valor lo
asigna a la primera columna, el segundo valor a la segunda columna, así
sucesivamente...
Consultas SQL de Acción
INSERT
Sintaxis para insertar un único registro:
INSERT INTO Tabla (campo1, campo2, .., campoN) VALUES (valor1,
valor2, ..., valorN);

•Cuando la tabla tiene una columna de tipo contador (AutoNumber), lo normal


es no asignar valor a esa columna para que el sistema le asigne el valor que le
toque según el contador, si por el contrario queremos que la columna tenga un
valor concreto, lo indicamos en la lista de valores.
•Cuando no se indica ninguna lista de columnas después de Tabla, se asume
por defecto que todas las columnas de la tabla, en este caso, los valores se
tienen que especificar en el mismo orden en que aparecen las columnas en la
ventana de diseño de dicha tabla, y se tiene que utilizar el valor NULL para
rellenar las columnas de las cuales no tenemos valores.
Consultas SQL de Acción
INSERT
Sintaxis para insertar un único registro:

INSERT INTO Tabla (campo1, campo2, .., campoN) VALUES (valor1,


valor2, ..., valorN);
Cuando indicamos nombres de columnas (campo1, campo2, …, campoN) estos
corresponden a nombres de columna de la tabla, pero no tienen por qué estar en
el orden en que aparecen en la ventana diseño de la tabla, también se pueden omitir
algunas columnas, la columnas que no se nombran tendrán por defecto el valor
NULL o el valor predeterminado indicado en la ventana de diseño de tabla.

Si se omite la lista de campos, la cláusula VALUES debe incluir un valor para cada campo
de la tabla, de otra forma fallará INSERT.
Consultas SQL de Acción
INSERT
Ejemplo3: 2 formas para insertar un nuevo empleado en Empleados

INSERT INTO Empleados


VALUES (10, 'Sandler', 'Adam', 'Rep. de Ventas', 850, 'Sr.', #9-9-1966#, #1-1-
1986#, Null, 'Beverly Hills', 'CA', 90212, 'EE.UU.', Null, Null, Null, 2);

INSERT INTO Empleados (idempleado, Apellidos, Nombre, Cargo, SalarioBase,


Tratamiento, fechanacimiento, fechacontratación, ciudad, región, códpostal,
país, jefe) VALUES (10, 'Sandler', 'Adam', 'Rep. de Ventas', 850, 'Sr.',
#9-9-1966#, #1-1-1986#, 'Beverly Hills', 'CA', 90212, 'EE.UU.', 2);

Nota: En la segunda consulta podemos omitir idempleado y su respectivo value 10, en


caso de no saber el último idempleado y el SQL de Access lo autoincrementará por ser de
tipo autonumérico.
Consultas SQL de Acción
INSERT
Ejem4: BD CuentaPrestamos.accdb
Insertar 2 nuevos registros en la tabla BancoNew

INSERT INTO BancoNew (domicilio, nombre, codbanco) VALUES ('Bulevar Los


Próceres #1500, SS', 'Banco Cuscatlán ', 'B17')

O de la siguiente forma: (en el orden de diseño de la tabla)


INSERT INTO BancoNew VALUES ('B18', 'Banco Hipotecario', 'Avenida
Cuscatlán #100, SS');
Consultas SQL de Acción
INSERT
Sintaxis para insertar registros de otra tabla:
INSERT INTO Tabla (Campo1, Campo2, ..., CampoN)
SELECT TablaOrigen.campo1, TablaOrigen.campo2, ...,
TablaOrigen.campoN FROM TablaOrigen

En este caso se seleccionarán los campos 1,2, ..., n de la tabla origen y se


grabarán en los campos 1,2,.., n de la Tabla. La condición SELECT puede
incluir la cláusula WHERE para filtrar los registros a copiar. Si Tabla y
TablaOrigen poseen la misma estructura podemos simplificar la
sintaxis a:
INSERT INTO Tabla SELECT TablaOrigen.* FROM TablaOrigen
WHERE [condiciones];
Consultas SQL de Acción
INSERT
Sintaxis para insertar registros de otra tabla:

INSERT INTO Tabla SELECT TablaOrigen.* FROM TablaOrigen

De esta forma los campos de TablaOrigen se grabarán en Tabla, para


realizar esta operación es necesario que todos los campos de TablaOrigen
estén contenidos con igual nombre en Tabla. En otras palabras, que Tabla
posea todos los campos de TablaOrigen (igual nombre e igual tipo).
En este tipo de consulta hay que tener especial atención con los campos contadores o
autonuméricos puesto que al insertar un valor en un campo de este tipo se
escribe el valor que contenga su campo homólogo en la tabla origen, no
incrementándose como le corresponde.
Si se agregan registros a una tabla con un campo Contador, no se debe incluir el campo
Contador en la consulta.
Consultas SQL de Acción
INSERT
Sintaxis para insertar registros de otra tabla:
INSERT INTO Tabla SELECT TablaOrigen.* FROM TablaOrigen

En lugar de agregar registros existentes en otra tabla, se puede especificar


los valores de cada campo en un nuevo registro utilizando la cláusula
VALUES. Si se omite la lista de campos, la cláusula VALUES debe incluir
un valor para cada campo de la tabla, de otra forma fallará INSERT.
Consultas SQL de Acción
INSERT
Ejem5: En la tabla BANCO, se desea ANEXAR todos los
registros almacenados en una tabla llamada BANCONEW

INSERT INTO banco SELECT banconew.* FROM banconew;

Al ejecutar la consulta:
Todos los registros de banconew se han ANEXADO a la tabla
banco.
Nota: no olvidar que además se puede filtrar con WHERE, los
registros que se van anexar.
Consultas SQL de Acción
INSERT
Ejer3: Anexar los siguientes registros a BancoNew:
B19, Banco Santander, Calle Madrid #200 INSERT INTO...
B20, Banco BBVA, Avenida Barcelona #500 VALUES()

Ejer4. Anexar a tbl banco desde tbl bancoNew sólo el registro


con código: B20 INSERT INTO...
SELECT...
FROM...
WHERE...
Consultas SQL de Acción
SELECT INTO
• Esta sentencia inserta filas creando en ese momento la tabla donde se insertan las
filas. Se suele utilizar para guardar en una tabla el resultado de una SELECT.
• La sintaxis es la siguiente:

• Las columnas de la nueva tabla tendrán el mismo tipo y tamaño que las
columnas origen, y se llamarán con el nombre de alias de la columna origen o en
su defecto con el nombre de la columna origen, pero no se transfiere ninguna
otra propiedad del campo o de la tabla como por ejemplo las claves e índices.
• La sentencia SELECT puede ser cualquier sentencia SELECT sin ninguna
restricción, puede ser una consulta multitabla, una consulta de resumen,
una UNION ...
• Si en la base de datos hay ya una tabla del mismo nombre, el sistema nos
avisa y nos pregunta si la queremos borrar. Si le contestamos que no, la SELECT no se
ejecuta.
Consultas SQL de Acción
SELECT INTO
• Para formar una sentencia SELECT INTO lo mejor es escribir la SELECT que
permite generar los datos que queremos guardar en la nueva tabla, y después
añadir delante de la cláusula FROM la cláusula INTO nuevatabla.
• La sentencia SELECT INTO se suele utilizar para crear tablas de trabajo, o tablas
intermedias, las creamos para una determinada tarea y cuando hemos terminado esa
tarea las borramos. También puede ser útil para sacar datos en una tabla para
enviarlos a alguien.

• Ejem6: Consulta que Selecciona todos los CAMPOS y registros de la tabla Empleados
y crea una nueva tabla llamada CopyEmpleados. Guardar el SQL como
_CopyEmpleados (No puede tener el mismo nombre de la nueva tabla o de alguna
que ya exista)
SELECT * INTO CopyEmpleados
FROM Empleados;
Consultas SQL de Acción
SELECT INTO
• Ejem7: Consulta que Selecciona algunos campos de la tabla Clientes y sólo registros
de Alemania, crea una nueva tabla llamada ClientesAlemania. Guardar el SQL como
_CLientesAlemania (No puede tener el mismo nombre de la nueva tabla o de alguna
que ya exista)

SELECT IdCliente AS CodCliente,


NombreCompañía, NombreContacto,
CargoContacto, Ciudad, País, Teléfono INTO
ClientesAlemania
FROM Clientes
WHERE País='Alemania';
Consultas SQL de Acción
SELECT INTO
• Ejer5: Consulta que Selecciona todos los CAMPOS de la tabla Clientes y registros de
Alemania y con cargo relacionado a las ventas. Crea una nueva tabla llamada
ClientesVtaAlemania. Guardar el SQL como _ClientesVtaAlemania

SELECT * INTO
FROM
WHERE
Consultas SQL de Acción
UPDATE
• Crea una consulta de actualización que cambia los valores de los campos de una tabla
especificada basándose en un criterio específico.
• Si en una consulta de actualización suprimimos la cláusula WHERE todos los registros
de la tabla señalada serán actualizados. Sintaxis:
UPDATE Tabla SET Campo1=Valor1, Campo2=Valor2, ...
CampoN=ValorN WHERE Criterio;
• Tabla puede ser un nombre de tabla, un nombre de consulta o una composición
de tablas, también puede incluir la cláusula IN si la tabla a modificar se encuentra en
una base de datos externa.
• UPDATE no genera ningún resultado. Para saber qué registros se van a cambiar, hay
que examinar primero el resultado de una consulta de selección que utilice el mismo
criterio y después ejecutar la consulta de actualización.
Consultas SQL de Acción
UPDATE
UPDATE Tabla SET Campo1=Valor1, Campo2=Valor2, ...
CampoN=ValorN WHERE Criterio;
• La cláusula SET especifica qué columnas van a modificarse y qué valores asignar
a esas columnas.
• CampoN, es el nombre de la columna a la cual queremos asignar un nuevo
valor por lo tanto debe ser una columna de la tabla origen.
• ValorN en cada asignación debe generar un valor del tipo de dato apropiado para
la columna indicada. La expresión debe ser calculable a partir de los valores de la
fila que se está actualizando. ValorN no puede ser una subconsulta.
• UPDATE es especialmente útil cuando se desea cambiar un gran número de registros o
cuando éstos se encuentran en múltiples tablas. Puede cambiar varios campos a la vez.
Consultas SQL de Acción
UPDATE
• Ejem8. La siguiente consulta actualiza registros en la tabla empleados, cambiando el
valor del campo cargo de “Rep. De Ventas” por el de “Representante de ventas”.
UPDATE Empleados SET cargo ='Representante de Ventas' WHERE
cargo='Rep. de Ventas';

• Ejer6. Actualizar el salario del siguiente empleado por medio del nombre y
apellido.
Nombre: Michael, apellidos: Suyama, Salario: 700, Nuevo Salario: 750.
UPDATE Empleados SET salariobase =750 WHERE apellidos='Suyama'
AND nombre="Michael";
Consultas SQL de Acción
UPDATE
• Ejem9. La siguiente consulta aumenta en un 10% los salarios de todos los empleados,
cuyo salario esté por debajo de la media general. Usamos la tabla CopyEmpleados

SELECT AVG(salariobase) AS SalarioProm FROM CopyEmpleados;

SELECT *
FROM CopyEmpleados
WHERE salariobase<(SELECT AVG(salariobase) FROM CopyEmpleados);

UPDATE CopyEmpleados SET SalarioBase = SalarioBase*1.10


WHERE salariobase<(SELECT AVG(salariobase) FROM CopyEmpleados);
Consultas SQL de Acción
UPDATE con parámetros
• Ejem10. La siguiente consulta RESTA la cantidad de Unidades en Existencia por medio
del código del producto. Ambos datos son pedidos por parámetros. Primero hacemos
una consulta para verificar las unidades en existencia del producto. Probar con el
IdProducto=1

SELECT IdProducto, NombreProducto, PrecioUnidad, UnidadesEnExistencia


FROM Productos
WHERE IdProducto=[Digite el código del producto que desea consultar];

UPDATE Productos SET UnidadesEnExistencia = UnidadesEnExistencia-


[CANTIDAD A RESTAR DE UNIDADES EN EXISTENCIA]
WHERE IdProducto=[DIGITE EL CODIGO DEL PRODUCTO];
Consultas SQL de Acción
UPDATE con parámetros
• Ejer7. La siguiente consulta SUMA la cantidad de Unidades en Existencia por medio del
código del producto. Deshaga los cambios realizados con la consulta anterior usando
parámetros. (Sume las unidades en existencia que restó en la consulta anterior
al producto 1)

UPDATE Productos SET UnidadesEnExistencia = UnidadesEnExistencia +


[CANTIDAD A SUMAR DE UNIDADES EN EXISTENCIA]
WHERE IdProducto=[DIGITE EL CODIGO DEL PRODUCTO];
Consultas SQL de Acción

La inteligencia consiste no sólo en el


conocimiento, sino también en la
destreza de aplicar los conocimientos
en la práctica.
(Aristóteles)
BIBLIOGRAFÍA
https://sistemaspdfs.files.wordpress.com/2010/05/cursosql.pdf

http://www.aulaclic.es/sql/f_sql.htm
http://quidel.inele.ufro.cl/~pvalenzu/tutoriales/sql/sql.html