Кванторные выражения делятся на два типа: квантор существования, при котором определяется истинность условия для любого элемента последовательности, и квантор общности, при котором определяется истинность условия для каждого элемента последовательности.
Синтаксис выражения следующий:
("some" | "every") Variable "in" Expression "satisfies" Expression |
Где:
- Variable – имя переменной.
- Expression – выражение XQuery, возвращающее последовательность.
Кванторное выражение служит примерно тем же целям, что и ключевые слова SOME и ANY в SQL. Например, следующий запрос возвращает все элементы а, которые больше всех элементов b:
declare @xml xmlset @xml = '<a>10</a>, <a>5</a>, <b>4</b>, <a>3</a>, <b>6</b>'select @xml::query(' for $a in /a where every $b in /b satisfies xs:integer($b) < xs:integer($a) return $a') |
Результат:
<a>10</a> |
Для большей наглядности перепишем предыдущий пример на SQL:
--создание таблицыcreate table test(a int, b int) --наполнение ее даннымиinsert into test values(1, 2)insert into test values(1, 3)insert into test values(4, 1) --запрос, возвращающий все значения поля а, которое больше--любого значения поля bselect a from test4 where a > any (select b from test4) |