Diferença (álgebra relacional)

Diferença: editar

É um operador da álgebra relacional e da teoria dos conjuntos matemáticos não comutativo cujo operandos (dois no total) devem ser união-compatíveis, ou seja, devem ter suas estruturas exatamente idênticas.

Sua definição formal é expressa por:  

 
Ilustração da operação diferença entre os conjuntos A e B

Teoria de utilização editar

A utilização do operador diferença entre dois conjuntos distintos A e B onde os mesmos tenham estruturas totalmente compatíveis entre si, resultará em:

"Todas as linhas que existam em A mas não existam em B."

Observe que:   é diferente de  , pois a diferença é não comutativa.

União-compatibilidade e não comutatividade editar

União-compatibilidade editar

Assim como nos operadores união e intersecção, o operador diferença exige que as suas relações de entrada estejam compatibilizadas, para que então, possa ser possível o retorno de uma nova relação de saída.

Critérios para existência da união-compatibilidade em duas relações:

  • Mesmo número de campos;
  • Campos correspondentes ao mesmo domínio (o tipo do seu conteúdo, como por exemplo: inteiro, valor, texto, data, hora, etc.);

Exemplo de relações união-compatíveis:

R1

Nome Idade Crédito_pessoal
Jonathan 21 1350,00
Leticia 20 850,00
João 62 5450,00

R2

Apelido Acessos Total_compras
84 200,00
Sara 1023 8850,00

Não comutatividade editar

Ao contrário dos operadores união e intersecção, o operador diferença possui a característica de ser não comutativo.

A não comutatividade é a definição para operações de conjuntos onde a ordem de entrada afeta o resultado, ou em outras palavras, é uma operação onde "a ordem dos fatores altera o resultado".

Para maiores definições leia o artigo sobre a comutatividade...

Exemplos de operação com conjuntos editar

R1

Nome Conta
João 1
Maria 2
José 3

R2

Nome Empréstimo
Paulo 100
Maria 200
Carlos 300

 

Nome
João
José

R1

x y z
1 1 1
1 2 2
2 2 3
3 1 1

R2

x y z
1 1 1
1 2 1
3 1 1

 

x y z
1 2 2
2 2 3

Exemplos em SQL editar

Dadas as seguintes relações:

medico

cpf nome codigo
12332112332 Jonathan 123
32165498712 Leticia 212
09876543210 Juçara 321

paciente

cpf nome codigo quarto
12332112332 João 938 456
32165498712 Maria 059 234
09876543210 José 549 234

Buscar o CPF e o nome das pessoas que são médicos mas não são pacientes:


Utilizando o operador diferença:
SELECT cpf, nome FROM medico MINUS SELECT cpf, nome FROM paciente;


Não utilizando o operador diferença:
SELECT cpf, nome FROM medico WHERE NOT EXISTS (SELECT cpf, nome FROM paciente WHERE cpf=medico.cpf AND nome=medico.nome);

Referências editar

http://www.ltc.ufes.br - Álgebra Relacional

http://www.knowledgerush.com - Relational Algebra