Está en la página 1de 25

UT05.- Tratamientos de datos.

Bases de Datos
1DAW – C.I.F.P. Carlos III - Cartagena
Índice.
1. Inserción de datos
2. Actualización de datos
3. Borrado de datos
1. Inserción de datos.
Inserción de datos
 Orden INSERT

INSERT INTO NombreTabla [(columna [, columna] ...)]


VALUES (valor [, valor] ...);

 NombreTabla: tabla en la que se va a insertar los datos


 [(columna [, columna] ...)]: columna(s) donde se van a introducir los
valores. Si no se especifican, serán todos los campos de la tabla.
 (valor [, valor] ...): valores que se van a dar a las columnas. Se
deben corresponder en orden, número y tipo con columna(s). Si un
valor no se especifica  NULL.
Inserción de datos
 Ejemplo.
INSERT INTO PROFESORES (APELLIDOS, ESPECIALIDAD,
COD_CENTRO)
VALUES (‘Smith, John’, ‘INFORMATICA’, 30);
 Las constantes de tipo carácter y tipo fecha van entre
comillas simples.
 Las columnas para las que no se dan valores, aparecen
como nulos. Si se ha especificado en su definición NOT
NULL, da error.
 Si damos valores a todas las columnas y en el mismo orden
en el que fueron definidas, no se necesitan el nombre de los
campos.
Ejemplos
 Ejemplo.
INSERT INTO PROFESORES
VALUES (21, 12345678, ‘De Falla, Manuel’, ‘MUSICA’);
Inserción con select
 Para insertar más de una fila en la misma sentencia a través
de una consulta (select)
INSERT INTO NombreTabla1 [(columna [, columna] ...)]
SELECT {columna [, columna ]... | * }
FROM NombreTabla2 [CLÁUSULAS DE SELECT];

 Ejemplo: insertar en la tabla EMPLE30, los empleados de


EMPLE que pertenecen al departamento 30.
INSERT INTO EMPLE30
(EMP_NO, APELLIDO, OFICIO, DIR, FECHA_ALT, SALARIO, COMISIÓN,
DEPT_NO)
SELECT EMP_NO, APELLIDO, OFICIO, DIR, FECHA_ALT, SALARIO,
COMISIÓN, DEPT_NO
FROM EMPLE
WHERE DEPT_NO = 30;
Inserción con select
 Como tienen la misma estructura se puede especificar de la siguiente
manera:
INSERT INTO EMPLE30
SELECT *
FROM EMPLE
WHERE DEPT_NO = 30;
 Insertar en la tabla NOMBRES, en la columna NOMBRE, el APELLIDO de los
empleados de la tabla EMPLE que sean del departamento 20.
INSERT INTO NOMBRES (NOMBRE)
SELECT APELLIDO
FROM EMPLE
WHERE DEPT_NO = 20;
 Si apellido supera la longitud de nombre  no se inserta y aparece un error.
Inserción con select
 Insertar un empleado de apellido ‘GARCÍA’, con número de
1111, en la tabla EMPLE, en el departamento con mayor
número de empleados. La fecha de alta será la actual.
Inventamos el resto de valores.
INSERT INTO EMPLE SELECT DISTINCT 1111, ‘GARCÍA’, ‘ANALISTA’, 7566,
SYSDATE, 2000, 120, DEPT_NO
FROM EMPLE
WHERE DEPT_NO = (SELECT DEPT_NO
FROM EMPLE
GROUP DEPT_NO
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
FROM EMPLE
GROUP BY DEPT_NO));
Inserción con select
 Solo desconocemos el valor de la columna DEPT_NO, que
devuelve SELECT. El resto los conocemos y los ponemos en el
SELECT
 DISTINCT.- Si no se pone, inserta tantas filas como
empleados haya en el departamento con mayor número de
empleados.
 Si hay más de un departamento con el máximo número de
empleados, da error porque devuelve más de una fila.
 Insertar un empleado de apellido ‘QUIROGA’ con
número de empleado 1112, en la tabla EMPLE. Los
restantes datos son iguales que los de GIL y con la
fecha de alta, la actual.
Inserción con select
INSERT INTO EMPLE
SELECT 1112, ‘QUIROGA’, OFICIO, DIR, SYSDATE, SALARIO,
COMISION, DEPT_NO
FROM EMPLE
WHERE APELLIDO = ‘GIL’;
 Dadas las tablas ALUM Y NUEVOS, inserta en la tabla
ALUM los nuevos alumnos. Inserta un empleado de
apellido ‘SAAVEDRA’ con número 2000. La fecha de
alta será la actual, el SALARIO será el mismo salario
de ‘SALA’ más del 20 por 100 y el resto de datos
serán los mismos que los datos de ‘SALA’.
Ejemplos
INSERT INTO ALUM
(SELECT * FROM NUEVOS MINUS SELECT * FROM
ALUM);

INSERT INTO ALUM


(SELECT 2000, ‘SAAVEDRA’, OFICIO, DIR, SYSDATE,
SALARIO*1.2, COMISION, DEPT_NO
FROM EMPLE
WHERE APELLIDO = ‘SALA’);
2. Actualización de datos
Orden update
 Actualiza los valores de una o varias filas.
UPDATE NombreTabla
SET columna1 = valor1, ...columnan = valorn
WHERE condición;

 SET indica las columnas que se van a actualizar y


sus valores.
 WHERE selecciona las filas que se van a actualizar.
Si se omite, la actualización afectará a todas las
filas de la tabla.
Ejemplos.
 Modificar la tabla CENTROS cambiando la dirección
del COD_CENTRO 22 a ‘C/Pirón 13’ y el número de
plazas a 295.
UPDATE CENTROS
SET DIRECCIÓN = ‘C/Pirón 13’, NUM_PLAZAS = 295
WHERE COD_CENTRO = 22
 ¿Qué pasaría si no se hubiese puesto la cláusula
WHERE?
 Aumenta en 100 euros el salario y en 10 euros la
comisión a todos los empleados del departamento 10,
de la tabla EMPLE.
Ejemplos
UPDATE EMPLE
SET SALARIO = SALARIO + 100, COMISION =
COMISION + 10
WHERE DEPT_NO = 10;
Update con select
 Puede estar contenida en WHERE o SET.
UPDATE <NombreTabla>
SET columna1 = valor1, ...columnan = valorn
WHERE columna3 = (SELECT ...);

UPDATE <NombreTabla>
SET (columna1, columna2, ...) = (SELECT col1, col2, ...)
WHERE condición;

UPDATE <NombreTabla>
SET columna1 = (SELECT col1...), columna2 = (SELECT col2 ...)
WHERE condición;
Ejemplos.
 Actualiza en la tabla CENTROS, la dirección y el número de
plazas del código de centro 10 a los valores de las
columnas correspondientes que están almacenadas en el
código de centro 50.
UPDATE CENTROS
SET (DIRECCION, NUM_PLAZAS) = (SELECT DIRECCION,
NUM_PLAZAS FROM CENTROS WHERE COD_CENTRO = 50)
WHERE COD_CENTRO = 10;
 Cambia el salario a la mitad y la comisión a 0, a aquellos
empleados de la tabla EMPLE que pertenezcan al
departamento con mayor número de empleados.
Ejemplos
UPDATE EMPLE
SET SALARIO = SALARIO /2, COMISIÓN = 0
WHERE DEPT_NO =
(SELECT DEPT_NO FROM EMPLE GROUP BY DEPT_NO HAVING COUNT(*) =
(SELECT MAX(COUNT(*)) FROM EMPLE GROUP BY DEPT_NO));

 Para todos lo empleados de la tabla EMPLE y del


departamento de ‘CONTABILIDAD’, cambiamos su
salario al doble del salario de ‘SÁNCHEZ’ y su
apellido, a minúscula.
Ejemplos
UPDATE EMPLE
SET APELLIDO = LOWER(APELLIDO),
SALARIO = (SELECT SALARIO *2 FROM EMPLE WHERE APELLIDO = ‘SÁNCHEZ’)
WHERE DEPT_NO = (SELECT DEPT_NO FROM DEPART WHERE DNOMBRE =
‘CONTABILIDAD’);

 Modifica el número de departamento de


‘SAAVEDRA’ . El nuevo departamento será el
departamento donde hay más empleados cuyo
oficio sea ‘EMPLEADO’.
Ejemplos
UPDATE EMPLE
SET DEPT_NO = (SELECT DEPT_NO FROM EMPLE WHERE
OFICIO = ‘EMPLEADO’
GROUP BY DEPT_NO HAVING COUNT(*) =
(SELECT MAX(COUNT(*)) FROM EMPLE WHERE OFICIO =
‘EMPLEADO’ GROUP BY DEPT_NO))
WHERE APELLIDO = ‘SAAVEDRA’;
3. Borrado de datos
Orden delete
 Elimina una o varias filas
DELETE [FROM] <NombreTabla>
WHERE condición;

 WHERE es fundamental para no borrar todas las filas


 Borrar el COD_CENTRO 50 de la tabla CENTROS
DELETE FROM CENTROS WHERE COD_CENTRO = 50;
 Borrar todas las filas de la tabla LIBRERÍA cuyos
EJEMPLARES no superen la media de ejemplares en su
estante.
Ejemplos
DELETE FROM LIBRERÍA
WHERE EJEMPLARES < (SELECT AVG(EJEMPLARES)
FROM LIBRERÍA L WHERE ESTANTE = L.ESTANTE
GROUP BY ESTANTE
 Borrar los departamentos de la tabla DEPART con
menos de 4 empleados
DELETE FROM DEPART
WHERE DEPT_NO IN (SELECT DEPT_NO FROM EMPLE
GROUP BY DEPT_NO HAVING COUNT(*) < 4);
 Borra de la tabla ALUM los ANTIGUOS alumnos.
Ejemplos
DELETE FROM ALUM
WHERE NOMBRE IN (SELECT NOMBRE FROM ANTIGUOS);
 Borra los departamentos de la tabla depart que no tienen
empleados asignados.
DELETE FROM DEPART
WHERE DEPT_NO NOT IN
(SELECT DEPT_NO FROM EMPLE);

DELETE FROM DEPART


WHERE DEPT_NO IN
(SELECT DEPT_NO FROM DEPART
MINUS
SELECT DEPT_NO FROM EMPLE);

También podría gustarte