I Oracle Database, MINUS
operatorn används för att endast returnera unika rader som returneras av den första frågan men inte av den andra.
Exempel
Anta att vi har följande tabeller:
SELECT * FROM Teachers;
SELECT * FROM Students;
Resultat:
LÄRARID | LÄRARNAMN |
---|---|
1 | Warren |
2 | Ben |
3 | Cathy |
4 | Cathy |
5 | Fakta |
6 | Fakta |
STUDENTID | STUDENTNAME |
---|---|
1 | Faye |
2 | Jet |
3 | Spike |
4 | Ein |
5 | Warren |
6 | Fakta |
Vi kan använda MINUS
operatör för att returnera lärare som inte också är elever:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;
Resultat:
LÄRARNAMN |
---|
Ben |
Cathy |
Så vi får bara värden som visas i Teachers
tabell som inte också visas i Elever
tabell.
Vi kan få olika resultat, beroende på vilken tabell som är till vänster och vilken som är till höger. Här är ett exempel som sätter Studenter
tabellen till vänster och Lärare
till höger:
SELECT StudentName FROM Students
MINUS
SELECT TeacherName FROM Teachers;
Resultat:
STUDENTNAME |
---|
Ein |
Faye |
Jet |
Spike |
Den här gången får vi elever som inte också är lärare.
MINUS
operatören returnerar endast distinkta rader. Så i vårt exempel returneras bara en rad för Cathy
, även om det finns två lärare med det namnet.
Ett alternativ
Det är möjligt att få samma resultat utan att använda
SELECT
DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName);
Resultat:
LÄRARNAMN |
---|
Ben |
Cathy |
MINUS
Motsvarigheter i andra RDBMS
Oracles MINUS
operatorn liknar EXCEPT
operatör som många andra RDBMS använder. MariaDB har en EXCEPT
operatör, men den har också infört en MINUS
operator som en synonym som kan användas i Oracle-läge.