sql >> Database >  >> RDS >> Oracle

Oracle MINUS-operator uitgelegd

In Oracle Database, de MINUS operator wordt gebruikt om alleen unieke rijen te retourneren die zijn geretourneerd door de eerste zoekopdracht, maar niet door de tweede.

Voorbeeld

Stel dat we de volgende tabellen hebben:

SELECT * FROM Teachers;
SELECT * FROM Students;

Resultaat:

TEACHERID NAAM LERAAR
1 Warren
2 Ben
3 Cathy
4 Cathy
5 Rekening
6 Rekening
STUDENTID STUDENTNAAM
1 Faye
2 Jet
3 Spike
4 Ein
5 Warren
6 Rekening

We kunnen de MINUS . gebruiken operator om docenten terug te sturen die niet ook studenten zijn:

SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;

Resultaat:

NAAM LERAAR
Ben
Cathy

We krijgen dus alleen waarden die voorkomen in de Teachers tabel die niet ook voorkomt in de Students tafel.

We kunnen verschillende resultaten krijgen, afhankelijk van welke tabel aan de linkerkant is en welke aan de rechterkant. Hier is een voorbeeld waarin de Students tabel aan de linkerkant en Teachers aan de rechterkant:

SELECT StudentName FROM Students
MINUS
SELECT TeacherName FROM Teachers;

Resultaat:

NAAM STUDENT
Ein
Faye
Jet
Spike

Deze keer krijgen we leerlingen die niet ook leraar zijn.

De MINUS operator retourneert alleen afzonderlijke rijen. Dus in ons voorbeeld wordt slechts één rij geretourneerd voor Cathy , ook al zijn er twee leraren met die naam.

Een alternatief

Het is mogelijk om hetzelfde resultaat te krijgen zonder de MINUS exploitant. We zouden ons eerste voorbeeld hier bijvoorbeeld naar kunnen herschrijven:

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

Resultaat:

NAAM LERAAR
Ben
Cathy

MINUS Equivalenten in andere RDBMS'en

Oracle's MINUS operator is vergelijkbaar met de EXCEPT operator die veel andere RDBMS'en gebruiken. MariaDB heeft een EXCEPT operator, maar het heeft ook een MINUS operator als synoniem dat kan worden gebruikt in Oracle-modus.


  1. Reset het root-wachtwoord van de MySQL-server

  2. MariaDB 5.5 upgraden naar MariaDB 10.1 op CentOS/RHEL 7 en Debian-systemen

  3. Is de OraOLEDB-provider in .NET onbetrouwbaar op CLOB-velden?

  4. Android Studio controleert/markeert Kotlin Room DAO-query's niet wanneer string meer dan 1 rij beslaat