sql >> Base de Datos >  >> RDS >> Oracle

Explicación del operador Oracle MINUS

En Oracle Database, el MINUS El operador se usa para devolver solo filas únicas devueltas por la primera consulta pero no por la segunda.

Ejemplo

Supongamos que tenemos las siguientes tablas:

SELECT * FROM Teachers;
SELECT * FROM Students;

Resultado:

ID DEL PROFESOR NOMBRE DEL PROFESOR
1 Warren
2 Ben
3 Cathy
4 Cathy
5 Factura
6 Factura
ID DE ESTUDIANTE NOMBRE DEL ESTUDIANTE
1 Faye
2 Jet
3 Pico
4 Ein
5 Warren
6 Factura

Podemos usar el MINUS operador para devolver profesores que no son también estudiantes:

SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;

Resultado:

NOMBRE DEL PROFESOR
Ben
Cathy

Entonces solo obtenemos valores que aparecen en Teachers que no aparecen en la tabla Students mesa.

Podemos obtener diferentes resultados, dependiendo de qué tabla está a la izquierda y cuál a la derecha. Aquí hay un ejemplo que pone a los Students mesa a la izquierda y Teachers a la derecha:

SELECT StudentName FROM Students
MINUS
SELECT TeacherName FROM Teachers;

Resultado:

NOMBRE DEL ESTUDIANTE
Ein
Faye
Jet
Espiga

Esta vez tenemos estudiantes que no son también profesores.

El MINUS El operador solo devuelve filas distintas. Entonces, en nuestro ejemplo, solo se devuelve una fila para Cathy , a pesar de que hay dos profesores con ese nombre.

Una Alternativa

Es posible obtener el mismo resultado sin usar MINUS operador. Por ejemplo, podríamos reescribir nuestro primer ejemplo así:

SELECT 
    DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);

Resultado:

NOMBRE DEL PROFESOR
Ben
Cathy

MINUS Equivalentes en otros RDBMS

MINUS de Oracle El operador es similar al EXCEPT operador que utilizan muchos otros RDBMS. MariaDB tiene un EXCEPT operador, pero también ha introducido un MINUS operador como un sinónimo que se puede utilizar en modo Oracle.