Oracle
 sql >> Base de données >  >> RDS >> Oracle

Explication de l'opérateur Oracle MINUS

Dans Oracle Database, le MINUS est utilisé pour renvoyer uniquement les lignes uniques renvoyées par la première requête mais pas par la seconde.

Exemple

Supposons que nous ayons les tables suivantes :

SELECT * FROM Teachers;
SELECT * FROM Students;

Résultat :

TEACHERID NOM DE L'ENSEIGNANT
1 Warren
2 Ben
3 Cathy
4 Cathy
5 Facture
6 Facture
ID ÉTUDIANT NOM DE L'ÉTUDIANT
1 Faye
2 Jet
3 Pointe
4 Ein
5 Warren
6 Facture

Nous pouvons utiliser le MINUS opérateur pour renvoyer les enseignants qui ne sont pas aussi des étudiants :

SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;

Résultat :

NOM DE L'ENSEIGNANT
Ben
Cathy

Nous n'obtenons donc que les valeurs qui apparaissent dans le Teachers tableau qui n'apparaissent pas également dans le Students table.

Nous pouvons obtenir des résultats différents, selon la table qui se trouve à gauche et celle qui se trouve à droite. Voici un exemple qui met les Students table à gauche et Teachers à droite :

SELECT StudentName FROM Students
MINUS
SELECT TeacherName FROM Teachers;

Résultat :

NOM DE L'ÉLÈVE
Ein
Faye
Jet
Pointe

Cette fois, nous obtenons des étudiants qui ne sont pas aussi des enseignants.

Le MINUS L'opérateur renvoie uniquement des lignes distinctes. Ainsi, dans notre exemple, une seule ligne est renvoyée pour Cathy , même s'il y a deux professeurs portant ce nom.

Une alternative

Il est possible d'obtenir le même résultat sans utiliser le MINUS opérateur. Par exemple, nous pourrions réécrire notre premier exemple en ceci :

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

Résultat :

NOM DE L'ENSEIGNANT
Ben
Cathy

MINUS Equivalents dans d'autres SGBDR

MINUS d'Oracle l'opérateur est similaire à EXCEPT opérateur utilisé par de nombreux autres SGBDR. MariaDB a un EXCEPT opérateur, mais il a également introduit un MINUS opérateur comme synonyme pouvant être utilisé en mode Oracle.