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.