• No se han encontrado resultados

LENGUAJE DE MANIPULACIÓN DE DATOS

LENGUAJE DE MANIPULACIÓN DE

DATOS

En el tema anterior hemos visto como las consultas SELECT mostraban conjuntos de resultados, según los criterios especificados. Pero en ningún caso producían modificaciones en los datos. Para poder realizar inserciones en las tablas, borrar registros o actualizar una serie de valores necesitamos lo que llamamos Lenguaje de Manipulación de Datos (DML). Las instrucciones que llevarán a cabo estas instrucciones son: INSERT, DELETE y UPDATE

1.- Añadir datos (INSERT)

Si lo que queremos es añadir nuevos registros a nuestras tablas utilizaremos la sentencia INSERT. Con esta sentencia, se pueden añadir una o más filas a la tabla. La sintaxis básica sería:

INSERT [INTO] <Tabla> [lista de campos] valores

Los valores los podremos especificar de dos formas:

a) Si utilizamos VALUES para indicar los valores de un registro.

INSERT [INTO] <Tabla> VALUES (valores)

b) Utilizando SELECT para especificar más de una fila:

INSERT [INTO] <Tabla>

SELECT campos

FROM tabla-s

1.1.- Insertar una fila (INSERT INTO ... VALUES)

Los valores especificados después de la palabra VALUES irán separados por comas (con la única condición que deben del mismo tipo de datos que el campo donde se van a añadir los datos).

Veamos un par de ejemplos:

INSERT INTO Pacientes VALUES (‘22345999’, ‘Antonio Pérez Leal’, ‘C/ La Marina, 34’, ‘03002’, ‘12/09/1980’)

INSERT INTO Pacientes (DNI, Nombre, FechaNac)

VALUES (‘24159357’, ‘Pilar Rico Rico’, ‘11/12/1985’)

En el segundo ejemplo, los campos de Pacientes que no están en la lista se le asignarán automáticamente el valor NULL al campo.

Si queremos realizar esta operaciones utilizando el Diseñador de Consultas gráfico, tenemos que cambiar el tipo de consulta que queremos realizar, y luego añadir los campos que deseamos modificar junto con los valores nuevos. También podremos observar que en la parte inferior del Diseñador de Consultas se muestra el código Sql asociado a dicha inserción.

1.2.- Insertar varias filas (INSERT INTO ... SELECT)

Podemos utilizar la sentencia SELECT para añadir más de un registro en las tablas. La sentencia SELECT, podrá ser todo lo complicada que deseemos, pero las columnas que devuelva tiene que coincidir en el mismo número de columnas del INSERT INTO, y que además sean también del mismo tipo (evidentemente no puedo añadir un campo fecha a uno que sea de tipo numérico).

Veamos un ejemplo. Supongamos que tenemos una tabla Histórico, donde vamos guardando el acumulado anual que se ha gastado cada paciente por año. La estructura de la tabla Histórico será la siguiente:

• Año: Año en que se han recogido las visitas. Será de tipo alfanumérico, porque la consulta lo devuelve como un texto.

• Nombre: Nombre del paciente que ha realizado visitas ese año.

• Total: recoge el importe que se ha gastado ese paciente en todas las visitas realizadas ese año.

La tabla tiene almacenado datos hasta el año 2011, y vamos a realizar una consulta que añada lo que se ha gastado cada paciente en las visitas del 2012. Para ello escribiremos el siguiente código Sql:

INSERT INTO Historico

SELECT YEAR(Fecha), Nombre, SUM(Importe)

FROM Pacientes P INNER JOIN Visitas V ON P.Dni=V.DniPaciente

WHERE YEAR(Fecha)=’2012’ GROUP BY YEAR(Fecha), Nombre

Si queremos realizar esta consulta desde el Diseñador de Consultas, tendremos que pulsar el botón derecho al lado de la tabla seleccionada, y elegir la opción Cambiar tipo, y luego Insertar resultados…Pudiendo componer consultas de inserción a partir de un Select.

Aquí tendremos que indicar en la Columna, el campo o expresión de da origen a los datos anexados. Luego en la columna Anexar, escoger los campos de las tablas donde queremos insertar los valores.

2. Eliminación de datos (DELETE)

2.1.- Eliminar filas

La instrucción para cuando queremos eliminar registros de nuestras tablas es DELETE. La sintaxis será la siguiente:

DELETE FROM <Tabla> WHERE <condición>

Si no indicamos ninguna condición (que no ponemos la cláusula WHERE), lo que ocurrirá es que se borraran todos los datos de la tabla, quedando solamente la estructura de campos.

Pero si lo que queríamos era borrar la tabla, tendríamos que utilizar la sentencia DROP TABLE.

Por ejemplo, si quiero borrar los Pacientes cuyo turno es 1, la sentencia sería la siguiente:

DELETE FROM Pacientes WHERE Turno=1

Cuando eliminemos registros, pueden existir restricciones de Integridad Referencial que nos impidan el borrado de esas filas. Por ejemplo, si el paciente 5 perteneciese al turno 1, hubiese realizado visitas, no dejará que se borre por la clave ajena que definimos en visitas. Para que se pueda dar de baja, primero tendremos que eliminar todas las visitas de ese paciente, y luego ya podremos dar de baja el paciente.

Si queremos hacer la misma consulta desde el Diseñador de consultas, tendremos que seleccionar la opción Cambiar tipo  Eliminar. Seleccionar a continuación la columna que queremos utilizar como criterio (Turno) y en filtro indicar la condición (=1).

2.2.- Eliminación de todas las filas (Truncate)

Pero si lo que queremos es eliminar todos los registros de una tabla, en vez de utilizar el DELETE sin el where, utilizaríamos la sentencia TRUNCATE que es mucho más rápido para eliminar todas las filas.

La sintaxis sería:

TRUNCATE TABLE <Tabla>

Por ejemplo, si quiero borrar toda la tabla Visitas:

TRUNCATE TABLE Visitas

Una restricción del TRUNCATE, es que no se puede realizar sobre una tabla a la cual exista una referencia con la restricción FOREIGN KEY.

3. Actualización de datos (UPDATE)

3.1.- Cambiar datos

En el caso que lo que se desee es modificar o cambiar algún valor de los registros que tenemos, la sentencia a utilizar es el UPDATE.

Por ejemplo, si queremos cambiar la Ciudad de todos aquellos pacientes de Alicante por Alacant. O por ejemplo, si queremos aumentar el Importe de nuestras visitas en un 20% para incluir el IVA.

La sintaxis del UPDATE será la siguiente:

UPDATE <Tabla>

SET <Campos a modificar o actualizar> WHERE <Condición>

La sentencia UPDATE, se puede utilizar para cambiar todos los registros de una tabla, si no ponemos ninguna condición Where en la instrucción. O podemos cambiar 1 o varios valores a la vez colocando la cláusula Where en el Update.

a) Actualizar a Alacant todos los pacientes de Alicante.

UPDATE Pacientes SET Ciudad=’Alacant’ WHERE Ciudad=’Alicante’

b) Aumentar en un 20 % el Importe de las Visitas.

UPDATE Visitas

SET Importe=Importe*1.20

En estas dos actualizaciones hay que tener en cuenta una cosa. Si ejecutamos dos veces cada sentencia Update, la primera vez cambiará las ciudades de Alicante a Alacant, pero la segunda vez no realizará ningún cambio, ya que en la tabla Pacientes no existirá ya ningún paciente de Alicante (serán todos de Alacant). Pero en la segunda sentencia Update, al

ejecutarla la segunda vez, volverá a incrementar en otro 20 % los Importes de las visitas. Así que, hay que llevar cuidado cuando ejecutemos una consulta no realizarlo dos veces, porque puede afectar a los datos reales de las tablas. Para realizar estas consultas desde el Diseñador de consultas tendríamos que seleccionar la opción Actualizar, y a continuación indicar la columna a modificar y el nuevo valor.

3.2.- Uso de Update con subconsultas

Las subconsultas dentro del Update nos permitirán seleccionar los registros que vamos a actualizar. Por ejemplo, si queremos disminuir el Importe en un 10% de aquellas Visitas cuyo Importe es superior a la media de los Importes de loa Pacientes de Elche, la sentencia Sql sería:

UPDATE Visitas

SET Importe=Importe * 0.9

WHERE Importe > (SELECT AVG(Importe)

FROM Pacientes P INNER JOIN Visitas V ON P.Dni=V.DniPaciente

Ejercicios Propuestos

Antes de realizar las prácticas debemos crear una copia de seguridad de Video Club, y restaurarla con otro nombre (por ejemplo, VideoDML), y trabajar con esta última, y así no borrar datos de la original. Hay que tener en cuenta, que habrá que crear to- das las relaciones de las claves ajenas.

INSERT

1.-

Utilizando el diseñador de consultas, añadir a la tabla Socios el siguiente socio con esta información:

Apellidos Nombre Dirección Código Postal

Rico Rico Antonio C/ Sombra, 5 03001

2.-

Desde el editor de SQL, añadir a la tabla Alquiler los siguientes datos: Código Socio Código Stock Fecha Salida

35 15 1/3/2009

Como no deja, cambiar el Código de Socio 35 por el 3, y realizar de nuevo la inserción.

3.-

Crear una copia de seguridad de la tabla Categorías utilizando el Create Table y el Insert Into … Value.

4.-

Crear mediante una consulta Select una tabla llamada Historico_Socios que con-tenga los siguientes datos, pero para aquellos socios que han alquilado alguna película:

Código Nombre y Apellidos Ciudad Fecha Alta

1 …

Antonio Rico Rico …

Alicante …

1/02/09 …

5.-

Crear una tabla llamada Resumen (con Create table) que tenga la siguiente estructura, y luego añadirle los registros con una consulta select. Un ejemplo de contenido de la tabla podría ser los valores de la siguiente tabla, donde tenemos para cada Socio, tendremos las películas que ha alquilado y el importe que se ha gastado alquilando películas.

Código Socio Películas alquiladas Importe gastado

23 Rico Rico, Antonio 4 12,00

DELETE

6.-

Dar de baja la Película cuyo código es el 9 (Psicosis).

7.-

Siguiendo con el ejercicio anterior, y para que nos deje eliminar la película, debemos modificar las claves ajenas necesarias, de forma que permita la eliminación en cascada de los registros asociados a la película 9 que queremos dar de baja.

TRUNCATE TABLE

8.-

Dar de baja toda la tabla CopiaCATEGORIAS (si tenemos problemas de integridad, crearnos una copia, y dar de baja todos los registros de la copia). Comprobar si ha sido vaciada la tabla.

UPDATE

9.-

Modificar la ciudad de aquellos socios de Alicante por Alacant. Ejecutar un par de veces la consulta.

Documento similar