Оператор минус в oracle
минус оператор
у меня есть 2 таблицы A и B.
SELECT COUNT(*) FROM (SELECT * FROM tableA)
возвращает 389
SELECT COUNT(*) FROM (SELECT * FROM tableB)
возвращает 217
SELECT COUNT(*) FROM
(SELECT * FROM tableA
INTERSECT
SELECT * FROM tableB)
возвращает 0
SELECT COUNT(*) FROM
(SELECT * FROM tableA
MINUS
SELECT * FROM tableB)
возвращает 389
SELECT COUNT(*) FROM
(SELECT * FROM tableB
MINUS
SELECT * FROM tableA)
возвращает 89
может кто-нибудь объяснить, почему последний запрос возвращает 89, а не 217?
2 ответов
минус принимает первый результирующий набор и удаляет все, что существует во втором результирующем наборе;Он также удаляет все дубликаты.
в вашем примере tableA имеет 389 строк, а tableB имеет 217 строк; ваш пересечение показывает, что нет общих строк, что означает, что tableA минус tableB составляет 389 строк (т. е. все из них).
tableB минус tableA возвращает отдельный набор строк в tableB, поэтому в tableB есть 89 различных значений.
предположим, если вы установили A и B, A = {1,2,3,4} и count (A) = 4, B = {5,6,6,7,7} и count (B) = 5
A-B = {1,2,3,4} таким образом, count(A-B) = count(A) = 4
но B-A = {5,6,7} и count (B) = 3
таким образом, мы понимаем, что минус исключает дубликаты терминов(или строк). Вот почему количество строк сократилось с 217 до 89.
надеюсь, что это помогает.