Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Explicação do operador Oracle MINUS


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.