W bazie danych Oracle MINUS operator jest używany do zwracania tylko unikalnych wierszy zwróconych przez pierwsze zapytanie, ale nie przez drugie.
Przykład
Załóżmy, że mamy następujące tabele:
SELECT * FROM Teachers;
SELECT * FROM Students; Wynik:
| ID NAUCZYCIELA | NAZWISKO NAUCZYCIELA |
|---|---|
| 1 | Warren |
| 2 | Ben |
| 3 | Kasia |
| 4 | Kasia |
| 5 | Rachunek |
| 6 | Rachunek |
| ID UCZNIA | NAZWISKO UCZNIA |
|---|---|
| 1 | Faye |
| 2 | Odrzutowiec |
| 3 | Skok |
| 4 | Ein |
| 5 | Warren |
| 6 | Rachunek |
Możemy użyć MINUS operator zwracający nauczycieli, którzy nie są jednocześnie uczniami:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students; Wynik:
| NAZWISKO NAUCZYCIELA |
|---|
| Ben |
| Kasia |
Tak więc otrzymujemy tylko wartości, które pojawiają się w Teachers tabela, która nie pojawia się również w Students stół.
W zależności od tego, który stół jest po lewej, a który po prawej, możemy uzyskać różne wyniki. Oto przykład, który umieszcza Students tabela po lewej i Teachers po prawej:
SELECT StudentName FROM Students
MINUS
SELECT TeacherName FROM Teachers; Wynik:
| NAZWISKO UCZNIA |
|---|
| Ein |
| Faye |
| Odrzutowiec |
| Skok |
Tym razem mamy uczniów, którzy nie są jednocześnie nauczycielami.
MINUS operator zwraca tylko różne wiersze. Tak więc w naszym przykładzie dla Cathy zwracany jest tylko jeden wiersz , mimo że jest dwóch nauczycieli o tym nazwisku.
Alternatywna
Możliwe jest uzyskanie tego samego wyniku bez użycia MINUS operator. Na przykład moglibyśmy przepisać nasz pierwszy przykład do tego:
SELECT
DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName); Wynik:
| NAZWISKO NAUCZYCIELA |
|---|
| Ben |
| Kasia |
MINUS Odpowiedniki w innych RDBMS
MINUS Oracle operator jest podobny do EXCEPT operator, którego używa wiele innych systemów RDBMS. MariaDB ma EXCEPT operator, ale wprowadził również MINUS operator jako synonim, którego można używać w trybie Oracle.