Предикаты в SQL

Материал из Энциклопедия о программировании
Перейти к: навигация, поиск

Предикат в SQL это:

  • в широком смысле, — любое выражение, результатом которого являются значения булевого типа — TRUE, FALSE, а так же UNKNOWN.
  • в узком смысле, — некий уточняющий фильтр. Самым явным примером предиката служит оператор WHERE.

Синопсис

Предикаты используются в условиях поиска предложений WHERE и HAVING в условиях соединения предложений FROM и др. конструкциях, где требуется логическое значение.

В SQL все операторы возвращающие один из вышеперечисленных типов (TRUE, FALSE,UNKNOWN) являются предикатами.

Приоритеты

Самые популярные предикаты:

Внимание! Настоятельно рекомендуется в SQL запросах использовать их именно в той последовательности, в которой они перечислены, т.к. СУБД выполняют их именно в такой последовательности.

Особенности

Этот раздел также можно назвать, или альтернативные заголовки раздела:
  • Подробнее о предикатах в SQL

Предикаты представляют собой выражения, принимающие значение булевых типов и не определённый тип. Они могут представлять собой как одно выражение, так и любую комбинацию из неограниченного количества выражений, построенную с помощью булевых операторов AND, OR или NOT. Кроме того, в этих комбинациях может использоваться SQL-оператор IS, а также круглые скобки для конкретизации порядка выполнения операций.

Предикат в языке SQL может принимать одно из трех значений TRUE (истина), FALSE (ложь) или UNKNOWN (неизвестно). Исключение составляют следующие предикаты: NULL (отсутствие значения), EXISTS (существование), UNIQUE (уникальность) и MATCH (совпадение), которые не могут принимать значение UNKNOWN.

Правила комбинирования всех трех истинностных значений легче запомнить, обозначив TRUE как 1, FALSE как 0 и UNKNOWN как 1/2 или 0.5, т.е. половина единицы (где-то между истинным и ложным, т.е. между нулём и единицей).

  • AND с 2-мя истинностными значениями дает минимум этих значений. Напр., TRUE AND UNKNOWN = UNKNOWN.
  • OR с 2-мя истинностными значениями дает максимум этих значений. Напр., FALSE OR UNKNOWN = UNKNOWN.
  • Отрицание истинностного значения = 1 - данное истинностное значение. Напр., NOT UNKNOWN = UNKNOWN.

Предикаты сравнения

Предикат сравнения представляет собой два выражения, соединяемых оператором сравнения. Имеется шесть традиционных операторов сравнения: =, >, <, >=, <=, <> (!=).

  • Данные типа NUMERIC (числа) сравниваются в соответствии с их алгебраическим значением.
  • Данные типа CHARACTER STRING (символьные строки) сравниваются в соответствии с их алфавитной последовательностью. Если a1a2…an и b1b2…bn — две последовательности символов, то первая «меньше» второй, если а1<b1, или а1=b1 и а2<b2 и т. д. Считается также, что а1а2…аn<b1b2…bm, если n<m и а1а2…аn=b1b2…bn, т.е. если первая строка является префиксом второй. Напр., 'folder'<'for', т.к. первые две буквы этих строк совпадают, а третья буква строки 'folder' предшествует третьей букве строки 'for'. Также справедливо неравенство 'bar' < 'barber', поскольку первая строка является префиксом второй.
  • Данные типа DATETIME (дата/время) сравниваются в хронологическом порядке.
  • Данные типа INTERVAL (временной интервал) преобразуются в соответствующие типы, а затем

сравниваются как обычные числовые значения типа NUMERIC.

Примеры

Получить информацию о компьютерах, имеющих тактовую частоту процессора не менее 500 МГц и цену ниже $800:

SELECT * FROM Pc
WHERE speed >= 500 AND price < 800;

Запрос возвращает следующие данные:

code model speed ram hd cd price
1 1232 500 64 5 12x 600.0
3 1233 500 64 5 12x 600.0
7 1232 500 32 10 12x 400.0
10 1260 500 32 10 12x 350.0

Получить информацию обо всех принтерах, которые не являются матричными и стоят меньше $300:

SELECT * FROM Printer
WHERE NOT (type = 'matrix') AND price < 300;

Результат выполнения запроса:

code model color type price
2 1433 y Jet 270.0
3 1434 y Jet 290.0