Databases
T02-006- Supresión de registros a partir de una consulta.
Enunciado
Al igual que las sentencias
INSERTyUPDATEvistas anteriormente, también se pueden hacer borrados de registros utilizando consultas como parte de las tablas donde se hará la eliminación o como parte de la condición que delimita la operación.
Ejemplo
En la tabla locations hay registradas direcciones que, en realidad, no están referenciadas por ningún departamento, por lo que vamos a eliminarlos para que no ocupen espacio de almacenamiento.
En primer lugar, comprobaremos qué direcciones de la tabla locations no están ocupadas por ningún departamento:
SELECT *
FROM locations
WHERE LOCATION_ID NOT IN (
SELECT LOCATION_ID
FROM DEPARTMENTS
);
LOCATION_ID STREET_ADDRESS POSTAL_CODE CITY STATE_PROVINCE COUNTRY_ID 2200 12-98 Victoria Street 2901 Sydney New South Wales AU 2300 198 Clementi North 540198 Singapore - SG 1000 1297 Via Cola di Rie 00989 Roma - IT ... ... ... ... ... ...
16 rows selected.Una vez que hemos comprobado cuáles serán los registros que se van a eliminar, podemos transformar esa selección a un borrado.
DELETE FROM locations
WHERE LOCATION_ID NOT IN (
SELECT LOCATION_ID
FROM DEPARTMENTS
);
16 row(s) deleted.Ejercicio
Elimina todos los departamentos en los que no hay asignado ningún empleado.
Nota: Debes tener en cuenta los posibles valores NULL.
Tipo
Solución
DELETE FROM HR.departments WHERE DEPARTMENT_ID NOT IN (
SELECT DISTINCT DEPARTMENT_ID FROM HR.employees WHERE DEPARTMENT_ID IS NOT NULL
);
Prueba
SELECT DEPARTMENT_ID
FROM HR.departments
ORDER BY DEPARTMENT_ID
LibrerÃas (Onfly databases)


