Нотация для множества констант была
Нотация для множества констант была показана в примере Q3. Кортеж констант обозначается, как показано в следующем примере:
<'CLERK',50>
Множество кортежей констант может быть представлено следующим образом:
(<'CLERK',50>, <'CLERK',52>, <'PROGRAMMER',52>)
Угловые скобки (<, >) могут также использоваться для обозначения подкортежа атрибутов, выбранных из кортежа в базе данных, как в запросе Q17.
Q17. Перечислить имена служащих, которые имеют те же задание и зарплату, что и Смит. SELECT NAME FROM EMP WHERE <JOB,SAL> = SELECT JOB,SAL FROM EMP WHERE NAME = 'SMITH'
В SEQUEL 2 допускается существование в базе данных неизвестных, или null-значений. На null-значение можно сослаться с помощью ключевого слова NULL. Null-значения игнорируются при вычислении всех встроенных функций, за исключением COUNT (например, в вычислении AVG(SAL) не участвуют неизвестные зарплаты).
IF X THEN Y | Y=T | Y=F | Y=? |
X=T | T | F | ? |
X=F | T | T | T |
X=? | T | ? | ? |
Рис. 2. Таблицы истинности для трехзначной логики
При определении, удовлетворяет ли данный кортеж разделу WHERE запроса, предикатам, тестирующим атрибуты, для которых кортеж содержит null-значение, присваивается неизвестное значение истинности (обозначаемое как "?"). Затем вычисляется значение истинности всего раздела WHERE с использованием трехзначной логики для вычисления результатов операций AND и OR (см. Рис. 2). Кортеж считается удовлетворяющим разделу WHERE, если итоговым истинностным значением раздела является TRUE, а не FALSE или ?. Например, кортеж со значением DNO, равным 50, и неопределенной зарплату будет удовлетворять разделу WHERE запроса Q18, но не запроса Q19.
Q18. SELECT * FROM EMP WHERE DNO = 50 OR SAL > 15000
Q19. SELECT * FROM EMP WHERE DNO = 50 AND SAL > 15000
Исключение из перечисленных выше правил делается в случае предикатов, которые явно ищут null-значения, например, WHERE SAL = NULL.В этих предикатах null-значение обрабатывается так же, как и любое другое значение.
Содержание Назад Вперед