Книга: Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Предикаты

Предикаты

Предикат - это просто выражение, которое утверждает некоторый факт о значении. Операторы SQL обычно проверяют предикаты во фразах WHERE и В выражениях CASE, ON является проверкой для предикатов JOIN, HAVING проверяет атрибуты в сгруппированном выводе. В PSQL операторы управления потоком выполнения проверяют предикаты в предложениях IF, WHILE и WHEN. Решения принимаются в соответствии с результатом вычисления предиката - истина или ложь.

Строго говоря, предикат может быть истинным, ложным и неопределенным. В SQL ложный и неопределенный результаты объединяются и трактуются как ложь. Иными словами, "если он не истинный, значит он ложный".

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

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

Возьмем такой простой оператор, где равенство = используется для проверки точного соответствия:

SELECT * FROM EMPLOYEE

WHERE LAST_NAME = 'Smith';

Это предикат "значением столбца LAST_NAME является 'smith'". Сравниваются две константы (текущее значение столбца и строковый литерал) для проверки их равенства. Выбирая каждую строку из таблицы EMPLOYEE, сервер будет отбрасывать все, где предикат является ложным (значение отличается от 'Smith') или неопределенным (столбец имеет значение NULL, следовательно, он не может быть определен, как имеющий значение 'Smith' или не имеющий значение 'Smith').

Оглавление книги


Генерация: 0.059. Запросов К БД/Cache: 0 / 0
поделиться
Вверх Вниз