V databázi Oracle je MINUS operátor se používá k vrácení pouze jedinečných řádků vrácených prvním dotazem, ale nikoli druhým.
Příklad
Předpokládejme, že máme následující tabulky:
SELECT * FROM Teachers;
SELECT * FROM Students; Výsledek:
| ID UČITELE | TEACHERNAME |
|---|---|
| 1 | Warren |
| 2 | Ben |
| 3 | Cathy |
| 4 | Cathy |
| 5 | Bill |
| 6 | Bill |
| STUDENTID | STUDENTNAME |
|---|---|
| 1 | Faye |
| 2 | Jet |
| 3 | Spike |
| 4 | Ein |
| 5 | Warren |
| 6 | Bill |
Můžeme použít MINUS operátor vrátit učitele, kteří nejsou zároveň studenty:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students; Výsledek:
| TEACHERNAME |
|---|
| Ben |
| Cathy |
Získáváme tedy pouze hodnoty, které se objevují v Teachers tabulka, která se také neobjevuje v Students stůl.
Můžeme získat různé výsledky podle toho, která tabulka je vlevo a která vpravo. Zde je příklad, který uvádí Students tabulka vlevo a Teachers vpravo:
SELECT StudentName FROM Students
MINUS
SELECT TeacherName FROM Teachers; Výsledek:
| STUDENTNAME |
|---|
| Ein |
| Faye |
| Jet |
| Spike |
Tentokrát dostáváme studenty, kteří nejsou zároveň učiteli.
MINUS operátor vrací pouze odlišné řádky. V našem příkladu je tedy vrácen pouze jeden řádek pro Cathy , i když jsou dva učitelé s tímto jménem.
Alternativa
Je možné získat stejný výsledek bez použití MINUS operátor. Například bychom mohli přepsat náš první příklad na toto:
SELECT
DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName); Výsledek:
| TEACHERNAME |
|---|
| Ben |
| Cathy |
MINUS Ekvivalenty v jiných RDBMS
MINUS společnosti Oracle operátor je podobný EXCEPT operátor, který používá mnoho jiných RDBMS. MariaDB má EXCEPT operátor, ale také zavedl MINUS operátor jako synonymum, které lze použít v režimu Oracle.