Databases

T02-006- Supresión de registros a partir de una consulta.

Enunciado

Al igual que las sentencias INSERT y UPDATE vistas 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

DML

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)