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