Diferença (álgebra relacional)
Este artigo ou secção contém uma lista de referências no fim do texto, mas as suas fontes não são claras porque não são citadas no corpo do artigo, o que compromete a confiabilidade das informações. (Março de 2019) |
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:
Teoria de utilização
editarA 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
editarUnião-compatibilidade
editarAssim 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
|
R2
|
Não comutatividade
editarAo 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
|
R2
|
|
R1
|
R2
|
|
Exemplos em SQL
editarDadas as seguintes relações:
medico
|
paciente
|
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);