В Oracle Database, MINUS Операторът се използва за връщане само на уникални редове, върнати от първата заявка, но не и от втората.
Пример
Да предположим, че имаме следните таблици:
SELECT * FROM Teachers;
SELECT * FROM Students; Резултат:
| TEACHERID | TEACHERNAME |
|---|---|
| 1 | Уорън |
| 2 | Бен |
| 3 | Кати |
| 4 | Кати |
| 5 | Сметка |
| 6 | Сметка |
| УЧЕНИК | STUDENTNAME |
|---|---|
| 1 | Фей |
| 2 | Реактивен |
| 3 | Спайк |
| 4 | Ейн |
| 5 | Уорън |
| 6 | Сметка |
Можем да използваме MINUS оператор, за да върне учители, които също не са студенти:
SELECT TeacherName FROM Teachers
MINUS
SELECT StudentName FROM Students; Резултат:
| TEACHERNAME |
|---|
| Бен |
| Кати |
Така че получаваме само стойности, които се появяват в Teachers таблица, която също не се показва в Students маса.
Можем да получим различни резултати, в зависимост от това коя маса е отляво и коя отдясно. Ето пример, който поставя Students таблица вляво и Teachers вдясно:
SELECT StudentName FROM Students
MINUS
SELECT TeacherName FROM Teachers; Резултат:
| STUDENTNAME |
|---|
| Ейн |
| Фей |
| Реактивен |
| Спайк |
Този път получаваме ученици, които не са и учители.
MINUS операторът връща само отделни редове. Така че в нашия пример се връща само един ред за Cathy , въпреки че има двама учители с това име.
Алтернатива
Възможно е да получите същия резултат, без да използвате MINUS оператор. Например, можем да пренапишем първия си пример на това:
SELECT
DISTINCT TeacherName
FROM Teachers t
WHERE NOT EXISTS (SELECT StudentName FROM Students s
WHERE t.TeacherName = s.StudentName); Резултат:
| TEACHERNAME |
|---|
| Бен |
| Кати |
MINUS Еквиваленти в други RDBMS
MINUS на Oracle операторът е подобен на EXCEPT оператор, който много други RDBMS използват. MariaDB има EXCEPT оператор, но също така е въвел MINUS оператор като синоним, който може да се използва в режим на Oracle.