No Oracle Database, o
MINUS
O operador é usado para retornar apenas linhas exclusivas retornadas pela primeira consulta, mas não pela segunda. Exemplo
Suponha que temos as seguintes tabelas:
SELECT * FROM Teachers;
SELECT * FROM Students;
Resultado:
ID DO PROFESSOR | NOME DO PROFESSOR |
---|---|
1 | Warren |
2 | Ben |
3 | Cathy |
4 | Cathy |
5 | Faturar |
6 | Faturar |
ESTUDANTE | NOME DO ALUNO |
---|---|
1 | Faye |
2 | Jato |
3 | Ponto |
4 | Ein |
5 | Warren |
6 | Faturar |
Podemos usar o
MINUS
operador para devolver professores que não são também alunos:SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Resultado:
NOME DO PROFESSOR |
---|
Ben |
Cathy |
Portanto, só obtemos valores que aparecem no
Teachers
tabela que também não aparece em Students
tabela. Podemos obter resultados diferentes, dependendo de qual tabela está à esquerda e qual está à direita. Aqui está um exemplo que coloca o
Students
tabela à esquerda e Teachers
a direita:SELECT StudentName FROM Students
MINUS
SELECT TeacherName FROM Teachers;
Resultado:
NOME DO ALUNO |
---|
Ein |
Faye |
Jato |
Ponto |
Desta vez, temos alunos que também não são professores.
O
MINUS
operador retorna apenas linhas distintas. Portanto, em nosso exemplo, apenas uma linha é retornada para Cathy
, embora existam dois professores com esse nome. Uma alternativa
É possível obter o mesmo resultado sem usar o
MINUS
operador. Por exemplo, poderíamos reescrever nosso primeiro exemplo para isso:SELECT
DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);
Resultado:
NOME DO PROFESSOR |
---|
Ben |
Cathy |
MINUS
Equivalentes em outros RDBMSs
MINUS
da Oracle operador é semelhante ao EXCEPT
operador que muitos outros RDBMSs usam. MariaDB tem um EXCEPT
operador, mas também introduziu um MINUS
operador como sinônimo que pode ser usado no modo Oracle.