Oracle NOT EXISTS (Español)

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *