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.