sql >> Databáze >  >> RDS >> Oracle

Vysvětlení operátora Oracle MINUS

V databázi Oracle je MINUS operátor se používá k vrácení pouze jedinečných řádků vrácených prvním dotazem, ale nikoli druhým.

Příklad

Předpokládejme, že máme následující tabulky:

SELECT * FROM Teachers;
SELECT * FROM Students;

Výsledek:

ID UČITELE 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

Můžeme použít MINUS operátor vrátit učitele, kteří nejsou zároveň studenty:

SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students;

Výsledek:

TEACHERNAME
Ben
Cathy

Získáváme tedy pouze hodnoty, které se objevují v Teachers tabulka, která se také neobjevuje v Students stůl.

Můžeme získat různé výsledky podle toho, která tabulka je vlevo a která vpravo. Zde je příklad, který uvádí Students tabulka vlevo a Teachers vpravo:

SELECT StudentName FROM Students
MINUS
SELECT TeacherName FROM Teachers;

Výsledek:

STUDENTNAME
Ein
Faye
Jet
Spike

Tentokrát dostáváme studenty, kteří nejsou zároveň učiteli.

MINUS operátor vrací pouze odlišné řádky. V našem příkladu je tedy vrácen pouze jeden řádek pro Cathy , i když jsou dva učitelé s tímto jménem.

Alternativa

Je možné získat stejný výsledek bez použití MINUS operátor. Například bychom mohli přepsat náš první příklad na toto:

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

Výsledek:

TEACHERNAME
Ben
Cathy

MINUS Ekvivalenty v jiných RDBMS

MINUS společnosti Oracle operátor je podobný EXCEPT operátor, který používá mnoho jiných RDBMS. MariaDB má EXCEPT operátor, ale také zavedl MINUS operátor jako synonymum, které lze použít v režimu Oracle.


  1. Příklady LOG() v SQL Server

  2. Co je SQL a jak s ním začít?

  3. Nová funkce Oracle 18c:Online úprava dělení

  4. @GeneratedValue polymorfní abstraktní supertřída přes MySQL