В 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.