sql >> Database teknologi >  >> RDS >> Oracle

Oracle MINUS Operatør forklaret

I Oracle Database er MINUS operator bruges til kun at returnere unikke rækker, der returneres af den første forespørgsel, men ikke af den anden.

Eksempel

Antag, at vi har følgende tabeller:

SELECT * FROM Teachers;
SELECT * FROM Students;

Resultat:

LÆRERID 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

Vi kan bruge MINUS operatør for at returnere lærere, der ikke også er studerende:

SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;

Resultat:

LÆRERNAVN
Ben
Cathy

Så vi får kun værdier, der vises i Teachers tabel, der ikke også vises i Studenter bord.

Vi kan få forskellige resultater, alt efter hvilken tabel der er til venstre og hvilken der er til højre. Her er et eksempel, der sætter Studenter tabel til venstre og Lærere til højre:

SELECT StudentName FROM Students
MINUS
SELECT TeacherName FROM Teachers;

Resultat:

STUDENTNAME
Ein
Faye
Jet
Spike

Denne gang får vi elever, der ikke også er lærere.

MINUS operatør returnerer kun distinkte rækker. Så i vores eksempel returneres kun én række for Cathy , selvom der er to lærere med det navn.

Et alternativ

Det er muligt at få det samme resultat uden at bruge MINUS operatør. For eksempel kunne vi omskrive vores første eksempel til dette:

SELECT 
    DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);

Resultat:

LÆRERNAVN
Ben
Cathy

MINUS Ækvivalenter i andre RDBMS'er

Oracles MINUS operatoren ligner EXCEPT operatør, som mange andre RDBMS'er bruger. MariaDB har en EXCEPT operatør, men den har også indført en MINUS operator som et synonym, der kan bruges i Oracle-tilstand.


  1. Hvad er den bedste måde at migrere en Django DB fra SQLite til MySQL?

  2. PHP:flere SQL-forespørgsler i én mysql_query-sætning

  3. django.db.utils.ProgrammingError:Relationen eksisterer allerede

  4. Hvordan forskønner man det output, der kommer fra SELECT-forespørgslen i kommandoprompten?