Sumário: neste tutorial, aprende a usar o operador Oracle NOT EXISTS
para subtrair um conjunto de dados de outro.
Introdução ao operador Oracle NOT EXISTS
O operador NOT EXISTS
funciona o oposto do operador EXISTS
operador. Utilizamos frequentemente o operador NOT EXISTS
para subtrair um conjunto de dados de outro.
Considerar a seguinte afirmação que usa o NOT EXISTS
operador:
SELECT *FROM table_nameWHERE NOT EXISTS (subquery);
O NOT EXISTS
operador retorna verdadeiro se a subconsulta não retorna nenhuma linha. Caso contrário, retorna falso.
Nota que o operador NOT EXISTS
retorna falso se a subconsulta retorna qualquer fila com um valor NULL.
Oracle NOT EXISTS examples
Ver o seguinte customers
e orders
tabelas na base de dados de amostras:
A seguinte declaração encontra todos os clientes que não têm encomenda:
SELECT nameFROM customersWHERE NOT EXISTS ( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id )ORDER BY name;
Para arquivar os clientes que não têm encomenda, utiliza-se a seguinte declaração:
CREATE TABLE customers_archive ASSELECT * FROM customersWHERE NOT EXISTS ( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id );
Para actualizar o limite de crédito dos clientes que não têm encomenda em 2017, usa a seguinte declaração UPDATE
declaração:
UPDATE customersSET credit_limit = 0WHERE NOT EXISTS( SELECT NULL FROM orders WHERE orders.customer_id = customers.customer_id AND EXTRACT( YEAR FROM order_date );
E para eliminar todos os clientes que não tinham encomenda em 2016 e 2017 da tabela customers
, utilize o seguinte DELETE
declaração:
Oracle NOT EXISTS vs. NOT IN
A seguinte declaração utiliza o IN
operador com uma subconsulta:
SELECT*FROMtable_nameWHEREid IN(subquery);
Subponha o subquery
devolve quatro valores 1, 2, 3, e NULL. Pode reescrever toda a consulta acima como se segue:
SELECT *FROM table_nameWHERE id = 1 OR id = 2 OR id = 3 OR id = NULL;
A expressão seguinte retorna sempre um valor NULO porque um valor NULO não se pode comparar com nada.
id = NULL
Por isso, a expressão seguinte retorna um valor NULO se qualquer linha do conjunto de resultados da subconsulta for NULO.
id NOT IN (subquery)
Em contraste, NULL não afecta o resultado do NOT EXIST
operador porque o operador NOT EXISTS
verifica apenas a existência de linhas na subconsulta:
SELECT *FROM table_nameWHERE NOT EXISTS(subquery);
Em conclusão, o operador NOT EXISTS
e NOT IN
comportam-se de forma diferente quando há valores nulos envolvidos.
Neste tutorial, aprendeu como usar o Oracle NOT EXISTS
operador para subtrair um conjunto de dados de outro.
- Este tutorial foi útil?
- Sim Não