Воссоединение SQL в 1995 г. люди, проекты, политика

       

Новые предикаты


В SQL:1999 имеются три новых предиката, один из которых мы будем рассматривать среди объектно-ориентированных свойств. Другими двумя являются предикат SIMILAR и DISTINCT.

С первой версии стандарта SQL поиск через символьные строки был ограничен очень простыми сравнениями (типа =, > или <>) и довольно рудиментарными возможностями сопоставления с образцами предиката LIKE:

WHERE NAME LIKE '%SMIT_'

В данном случае значения столбца NAME сопоставляются со значениями, включающими ноль или более символов перед четырьмя символами 'SMIT' и в точности один символ за ними (такими, как SMITH или HAMMERSMITS).

В связи с пониманием того, что приложениям часто требуются более усложненные возможности, которые, тем не менее, не совпадают с полным набором операций над текстами, в SQL:1999 был введен предикат SIMILAR, где в образцах сопоставления можно использовать регулярные выражения в стиле UNIX. Например:

WHERE NAME SIMILAR TO ' (SQL- (86|89|92|99) ) | (SQL (1|2|3))'

Этот предикат произвел бы сопоставление образца с различными названиями, присваивавшимися когда-либо стандарту SQL. Слегка неудачно то, что регулярные выражения, используемые в предикате SIMILAR, не совсем следуют синтаксису регулярных выражений UNIX, но некоторые символы UNIX уже используются в SQL для других целей.

Другой новый предикат DISTINCT очень похож по своему действию на обычный предикат SQL UNIQUE; важным отличием является то, что два неопределенных значения считаются неравными одно другому и поэтому удовлетворяют предикату UNIQUE, но это желательно не для всех приложений. Предикат DISTINCT рассматривает два неопределенных значения как неотличающиеся одно от другого (хотя, конечно, они не являются равными и в то же время не являются неравными), и поэтому два неопределенных значения не удовлетворяют предикату DISTINCT.



Содержание раздела