Resumen: en este tutorial, aprenderá a utilizar el operador Oracle NOT EXISTS
para restar un conjunto de datos de otro.
Introducción al operador NOT EXISTS de Oracle
El operador NOT EXISTS
funciona de forma opuesta al operador EXISTS
. A menudo utilizamos el operador NOT EXISTS
con una subconsulta para restar un conjunto de datos de otro.
Considera la siguiente sentencia que utiliza el operador NOT EXISTS
:
SELECT *FROM table_nameWHERE NOT EXISTS (subquery);
El operador NOT EXISTS
devuelve true si la subconsulta no devuelve ninguna fila. En caso contrario, devuelve false.
Nótese que el operador NOT EXISTS
devuelve false si la subconsulta devuelve alguna fila con valor NULL.
Ejemplos de NOT EXISTS de Oracle
Vea las siguientes tablas customers
y orders
en la base de datos de ejemplo:
La siguiente sentencia encuentra todos los clientes que no tienen pedido:
SELECT nameFROM customersWHERE NOT EXISTS ( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id )ORDER BY name;
Para archivar los clientes que no tienen pedido, se utiliza la siguiente sentencia:
CREATE TABLE customers_archive ASSELECT * FROM customersWHERE NOT EXISTS ( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id );
Para actualizar el límite de crédito de los clientes que no tienen pedido en 2017, se utiliza la siguiente sentencia UPDATE
:
UPDATE customersSET credit_limit = 0WHERE NOT EXISTS( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id AND EXTRACT( YEAR FROM order_date );
Y para eliminar todos los clientes que no tuvieron ningún pedido en 2016 y 2017 de la tabla customers
, se utiliza la siguiente sentencia DELETE
:
Oracle NOT EXISTS vs. NOT IN
La siguiente sentencia utiliza el operador IN
con una subconsulta:
SELECT*FROMtable_nameWHEREid IN(subquery);
Suponga que el subquery
devuelve cuatro valores 1, 2, 3 y NULL. Puedes reescribir toda la consulta anterior de la siguiente manera:
SELECT *FROM table_nameWHERE id = 1 OR id = 2 OR id = 3 OR id = NULL;
La siguiente expresión siempre devuelve un valor NULL porque un valor NULL no puede compararse con nada.
id = NULL
Por lo tanto, la siguiente expresión devuelve un valor NULL si cualquier fila del conjunto de resultados de la subconsulta es NULL.
id NOT IN (subquery)
En cambio, NULL no afecta al resultado del operador NOT EXIST
porque el operador NOT EXISTS
únicamente comprueba la existencia de filas en la subconsulta:
SELECT *FROM table_nameWHERE NOT EXISTS(subquery);
En conclusión, los operadores NOT EXISTS
y NOT IN
se comportan de forma diferente cuando hay valores nulos involucrados.
En este tutorial, ha aprendido a utilizar el operador de Oracle NOT EXISTS
para restar un conjunto de datos de otro.
- ¿Ha sido útil este tutorial?
- SíNo