Виды предикатов в SQL


1) Сравнения (отношения)
<конструктор значений строки> [NOT] {=|>|<|>=|<=|<>}|(<подзапрос>) <конструктор значений строки>

Сравниваются два множества, одно из которых – это обычно значение столбца, а другое – чаще всего константа или подзапрос. Значения. Которые при этом сравниваются, называют скалярными.

Примечание по предикатам:
• Если хотя бы одно из сравниваемых значений (слева или справа) равно NULL, то результатом сравнения будет UNKNOWN.
• При сравнении строк разной длины недостающие символы дополняются пробелами. Следует также иметь в виду, что в ASCII коды заглавных букв меньше, чем коды строчных, а у цифр коды меньше, чем у букв. В EBCDIC все наоборот.
• Эти предикаты существенно влияют на эффективность запроса, поскольку в этом случае при поиске строк используются индексы. Что позволяет избежать полного просмотра таблицы.

Особенности промышленных серверов:
• В SQL помимо <> можно использовать !=
• Кроме того допустимы такие операторы отношения, как !< (не меньше), !> (не больше).

2) Попадания во множество
<конструктор значений строки> [NOT] IN (<подзапрос>|<набор конструкторов значений строки>)

Определяется множество значений, которому объект сравнения, записанный до ключевого слова IN, может принадлежать или не принадлежать. Если подзапрос не возвращает строк, то предикат принимает значение FALSE.

Примеры на работу со множествами:

SELECT * FROM SalesPeople WHERE City IN (‘Barcelona’, ’London’)
SELECT * FROM SalesPeople WHERE SNum NOT IN (1001, 1007, 1004)
SELECT * FROM SalesPeople WHERE (SNum, SName) IN ((1001, ‘Peel’), (1002, ‘Serres’))

3) Принадлежности диапазону
<конструктор значений строки> [NOT] BETWEEN <конструктор значений строки 1> AND <конструктор значений строки 2>
• <конструктор значений строки 1> — определяет нижнюю границу диапазона
• <конструктор значений строки 2> — определяет верхнюю границу диапазона
• Предикат BETWEEN сходен с предикатом IN, но вместо элементов множества он задает включающие границы, в которые [не] должно попадать проверяемое значение.

Примеры на принадлежность диапазону:

SELECT * FROM Customer WHERE CName BETWEEN ‘A’ AND ‘G’
SELECT * FROM SalesPeople WHERE (Comm BETWEEN .10 AND .12) AND NOT Comm IN (.10, .12)
//Показывает, как исключить границы из диапазона значений.

4) Подобия:
<столбец> [NOT] <шаблон> [ESCAPE <символ>]

Примечания по предикату подобия:
• Предикат подобия применим только к символьным данным, поскольку используется для поиска подстрок. С этой целью используются спецсимволы, которые могут обозначать все, что угодно. Так символ «_» заменяет любой одиночный символ, который может быть размещен в данной позиции, а символ «%» заменяет последовательность символов произвольной длины.
• В тех случаях, когда объектом поиска являются перечисленные спецсимволы, используется ключевое слово ESCAPE оно позволяет определить любой символ своеобразным флагом, используемым непосредственно перед спецсимволом и означающим, что следующий за ним символ «%» или «_» следует воспринимать как обычный символ. Если при этом необходимо найти и ESCAPE-символ, то его следует написать дважды подряд.

Особенности промышленных серверов: В SQL Server можно шаблоны задавать с помощью маски с []: ‘[A-D]%’, ‘^[F-M]%’

Примеры на предикат подобия:

SELECT * FROM SalesPeople WHERE SName LIKE ‘P__I%’
SELECT * FROM SalesPeople WHERE SName LIKE ‘%/_//%’ ESCAPE ‘/’

5) Проверки NULL-значений:
<конструктор значений строки> IS [NOT] NULL
Проверяются пропущенные (отсутствующие) значения в колонке таблицы.

Примечание: если <конструктор значений строки> включает несколько значений, то в общем случае: IS NOT ? NULL NOT (IS NULL), поскольку аргумент не значение, а конструктор строки.

Примеры на предикат проверки NULL-значений:

SELECT * FROM Customer WHERE City IS NULL
SELECT * FROM SalesPeople WHERE Comm IS NOT NULL

6) Булевы операторы:
<предикат> {AND|OR|NOT} <предикат>

Примечания: булевы оператора связывают один или несколько предикатов, образуя единственное логическое значение TRUE|FALSE. Используя предикаты с булевыми операторами, можно значительно увеличить и избирательную способность по отбору строк в результат запроса.

При использовании булевых операторов, особенно оператора NOT, следует применять круглые скобки для правильного составления условий.

Примеры на булевы операторы:

SELECT * FROM Customer WHERE City=’San Jose’ OR Rating>200
SELECT * FROM Orders WHERE NOT ((ODate=10/03/1990 AND SNum>1002) OR Amt>2000)

7) Перекрытия
<конструктор значений строки> OVERLAPS <конструктор значений строки>

Определяет, будет ли один заданный период времени перекрывать другие заданные периоды.

Примеры:

(Datetime ‘1992-11’ Interval ‘0004-01’) OVERLAPS (Datetime ‘1994-11’, Datetime ‘1994-02’)
(Datetime ‘1992-11’ Interval ‘-0004-01’) OVERLAPS (Datetime ‘1994-11’, Datetime ‘1994-02’)


Комментарии запрещены.




Статистика