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.