Программирование >>  Хронологические базы данных 

1 ... 333 334 335 [ 336 ] 337 338 339 ... 348


Здесь параметр <шаблон> представляет собой произвольное выражение наподобие символьной строки, а параметр <исключение> (если указана фраза ESCAPE) - выражение наподобие символьной строки, которое в результате вычисления дает единственный символ. Рассмотрим пример,

SELECT P.PI, P.PNAME FROM P

WHERE P.PNAME LIKE C%;

Это сформулированный на языке SQL запрос Определить номера и наименования деталей, назвавания которых начинаются с буквы С . Результат выполнения запроса представлен ниже.

PNAME

Поскольку предложение ESCAPE не указано, символы в параметре <шабло1{> интерпретируются так.

Символ подчеркивания задается для любого отдельного символа.

Символ процента I устанавливается для любой последовательности из п символов, где п может быть равно нулю.

Все остальные символы представляют сами себя.

В данном примере по запросу будут возвращены строки из таблицы Р, для которых значение в столбце PNAME начинается с большой буквы С , за которой следует произвольная последовательность символов (в количестве, большем либо равном нулю).

Приведем еще несколько примеров.

ADDRESS LIKE Дает результат истина, если в любом месте значения в столб-

%Вегк1еу це ADDRESS содержится строка Berkley

Sl LIKE S Дает результат истина, если значение в столбце S# состоит

ровно из трех символов и первый символ - S

PNAME LIKE %С Дает результат истина, если значение в столбце PNAME состоит

из четырех или более символов и последним трем предшествует символ С

MYTEXT LIKE = % Дает результат истина, если значение в столбце MYTEXT начи-ESCAPE = нается с символа подчеркивания (см. ниже)

В последнем примере символ = указан как символ исключения, означающий, что специальное назначение для символов % и может быть отменено, если им будет предшествовать символ = .

И наконец отметим, что в предложении LIKE <условие Ике> условие вида

X NOT LIKE у [ ESCAPE Z ]

определяется как равносильное следующему.

NOT ( X LIKE у [ ESCAPE Z ] )



Условие MATCH

Параметр <условие match> имеет следующий формат. <конструктор строки> MATCH UNIQUE (<табличное выражениё> )

Пусть rl - строка, которая получается в результате вычисления значения параметра <конструктор строки>, и пусть Т- таблица, которая получается в результате вычисления выражения в параметре <та6лкчное выражение>. Тогда условие, определенное параметром <условие match>, будет истинным, если и только если таблица Г содержит ровно одну строку (скажем, г2), такую, что операция сравнения

rl = г2

дает для нее результат истина. Приведем пример.

SELECT SP.* FROM SP

WHERE NOT ( SP.SI MATCH UNIQUE ( SELECT S.Sl FROM S ) ) ;

Это сформулированный на языке SQL запрос Найти поставки, которые выполнятся более чем одним поставщиком из таблицы поставщиков . Он может быть полезен при проверке целостности базы данных, поскольку, если база данных корректна, таких поставок, безусловно, не должно быть. Отметим, что для выполнения этой же проверки могло бы использоваться условие принадлежности (вхождения) <условие in>.

Кроме того, в фразе MATCH UNIQUE ключевое слово UNIQUE может быть опущено, но тогда фраза MATCH превратится в синоним фразы IN (по крайней мере, если не учитывать NULL-значения).

Условие ALL или ANY

Параметр <условие all или апу> имеет следующий общий синтаксис.

<конструктор строки> <оператор сравнения> <квалификатор>

(<табличное выражение> )

Здесь параметр <оператор сравненное* представляет любой оператор из обычного набора операторов сравнения (=, о и т.д.), а уточнение <квалификатор> может иметь значение ALL или ANY. В общем случае параметр <условие all или апу> принимает значение истина, если и только если результат соответствующего сравнения при значении квалификатора ALL (либо ANY) является истиной для всех (соответственно для каких-нибудь) строк в таблице, определяемой значением параметра <табличное выражение>. (Если таблица пуста, то условие ALL всегда дает значение истина, а условие ANY - значение ложь). Приведем пример: Определить наименования деталей, вес которых больше, чем вес любой из голубых деталей .

SELECT DISTINCT РХ.PNAME FROM Р AS РХ

WHERE PX.WEIGTH > ALL ( SELECT PY.WEIGTH

FROM P AS PY WHERE PY.COLOR = Blue ) j



Для данных нашего обычного примера результат будет таким.

PNAME

Пояснения. Вложенный параметр <табличное выражение> возвращает множество значений веса голубых деталей. Внешнее предложение SELECT возвращает наименования тех деталей, вес которых больше любого значения веса из указанного множества. В общем случае в конечном результате, безусловно, может содержаться любое количество наименований деталей (в том числе и нулевое).

Замечание. Здесь уместно предупредить читателя, что при использовании параметра <условие all или апу> неискушенные пользователи часто делают ошибки. В формулировке предыдущего запроса на языке SQL было бы естественнее использовать ключевое слово любой (ANY) вместо каждый (ALL), что привело бы к (неверному) использованию сравнения > ANY вместо > ALL. Аналогичные замечания справедливы и для всех остальных операторов сравнения с квалификаторами ANY и ALL.

Условие UNIQUE

Параметр <условие unigue> используется для проверки, является ли каждая строка некоторой таблицы уникальной (т.е. не имеет ли дубликатов). Синтаксис этого условия следующий.

UNIQUE ( <табличное выражение> )

Условие принимает значение истина, если в результате вычисления выражения, заданного параметром <табличное выражениё>, получается таблица, в которой все строки различны, и ложь - в противном случае.

А.4. Скалярные выражения

в языке SQL допустимые значения параметра <скалярное выражение> образуют достаточно типичный набор и вполне самоочевидны. Здесь мы ограничимся перечнем наиболее важных операторов, которые могут быть использованы в конструкциях таких выражений, и дадим лишь несколько комментариев для операторов CASE и CAST, смысл которых, возможно, не совсем очевиден. Список операторов в алфавитном порядке выглядит так.

Арифметические операторы ( + , -, *, /) OCTET LENGTH

BIT LENGTH POSITION

CASE SESSION USER

CAST SUBSTRING

CARACTER LENGTH SYSTEM USER

Операция конкатенации ( ) TRIM

CURRENT USER UPPER

LOWER USER



1 ... 333 334 335 [ 336 ] 337 338 339 ... 348

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика