Определение проверки на NULL-значение.
::=
<Значимое выражение>
не должно быть <запросом выборки>
.
Если <предикат неопределенного значения>
является <предикатом внешнего соединения в стиле ORACLE>
, то:
конструкция '<значимое выражение> IS NOT NULL'
игнорируется (если оператор
внешнего соединения (+) опустить, то предикат IS NOT NULL
выполнится, и
результат запроса, написанного ниже, не будет содержать записей).
create or replace table test ( a BIGINT not null, b INTEGER null, c BIGINT null ); insert into test (a,b,c) values (1,1,1); insert into test (a,b,c) values (2,null,2); insert into test (a,b,c) values (3,1,null); insert into test (a,b,c) values (4,null,null); insert into test (a,b,c) values (5,1,5);
Запрос:
select * from test t1, test t2 where t1.b=1 and t1.a=t2.c(+) and t2.a(+) is not null and t2.c(+)=2;
эквивалентен:
select * from test t1, test t2 where t1.b=1 and t1.a=t2.c(+) and t2.c(+)=2;
в конструкции '<значимое выражение> IS NULL'
оператор внешнего соединения
игнорируется (т.е. если оператор внешнего соединения (+) опустить, то предикат
IS NULL выполнится, и результаты запросов, написанных ниже, будут эквивалентны).
Запрос:
select * from test t1, test t2 where t1.b=1 and t1.a=t2.c(+) and t2.a(+) is null and t2.c(+)=2;
эквивалентен:
select * from test t1, test t2 where t1.b=1 and t1.a=t2.c(+) and t2.a is null and t2.c(+)=2;
Конструкция '<значимое выражение> IS NULL'
имеет одно из двух значений: истина (TRUE) или ложь (FALSE).
Конструкция '<значимое выражение> IS NULL'
истинна только тогда, когда <значимое выражение>
имеет NULL-значение.
Конструкция '<значимое выражение> IS NOT NULL'
эквивалентна конструкции 'NOT (<значимое выражение> IS NULL)'
.
<Значимое выражение>
может быть задано <SQL-параметром>
, который должен содержать спецификацию типа данных параметра.
select count(*) from auto where ? (int) is not null; 5 | 1000| select count(*) from auto where ? (int) is not null; NULL | 0|
select * from person where age is not null;