Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Wyjaśnienie operatora Oracle MINUS

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle PL/SQL:jak uzyskać ślad stosu, nazwę pakietu i nazwę procedury

  2. REPLACE() Funkcja w Oracle

  3. Zmiana definicji TYP w Oracle 21c

  4. Oracle wstawia z zaznaczenia do tabeli z większą liczbą kolumn

  5. Jak usunąć „Wybrano X wierszy” w SQLcl i SQL*Plus (Oracle)