Я не могу говорить за части Java, но могу выполнить часть sql-сервера.
SELECT * FROM Test WHERE xmlData.exist ( '/record/mark[text() = "5"]' ) = 1
Это быстрее, потому что мы выполняем все совпадения строк внутри XQuery
Но это может не подходить, поскольку оно обозначает ваши данные. Поскольку вы хотели получить значение, вы были вынуждены указать первый экземпляр [1]
в своем запросе. Этот код будет соответствовать чему-то с несколькими отметками, где первая не пять, а следующая. Очевидно, что это может быть неуместным в вашем случае использования.
<record>
<name>Louise</name>
<mark>10</mark>
<mark>5</mark>
</record>
Sql Fiddle