Oracle
 sql >> база данни >  >> RDS >> Oracle

Обяснение на оператора Oracle MINUS

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle:селективна уникалност на базата на функция индекс

  2. Създаване на тригер за последователност на Oracle

  3. Най-бързият начин да проверите дали някои записи в таблицата на базата данни?

  4. Защо PL/SQL не зачита привилегиите, предоставени от ролите?

  5. alter table modify колона в базата данни на Oracle