Операторы
работы с множествами
117
WHERE open_branch_id = 2;
++
| emp_id |
++
| 11 |
| 12 |
++
2 rows in set (0.01 sec)
В этом варианте запроса результирующий набор включает три строки
из результирующего набора первого
запроса минус сотрудник с ID,
равным 10, который присутствует в результирующих наборах обоих
запросов. В спецификации SQL
ANSI также описан оператор
except
all
,
но опять же он реализован только в DB2 Universal Server IBM.
В операторе
except
all
есть небольшая хитрость.
Вот пример, показы
вающий, как обрабатываются дублирующие данные. Скажем,
есть два
множества данных, имеющих следующий вид:
Множество A
++
| emp_id |
++
| 10 |
| 11 |
| 12 |
| 10 |
| 10 |
++
Множество B
++
| emp_id |
++
| 10 |
| 10 |
++
В результате операции
A
except
B
получаем следующее:
++
| emp_id |
++
| 11 |
| 12 |
++
Если изменить
операцию и применить
A
except
all
B
, увидим следующее:
++
| emp_id |
++
| 10 |
| 11 |
118
Глава 6. Работа с множествами
| 12 |
++
Следовательно, разница между
этими двумя операциями в том, что
ex
cept
удаляет все экземпляры дублирующихся данных из множества А,
тогда как
except
all
удаляет из множества А
только один экземпляр дуб
ликата данных для каждого экземпляра дубликата данных множества В.
Достарыңызбен бөлісу: