Работа с пустыми значениями
Очень важно отметить, что столбец с пустым значением никогда ничему не будет равен (включая пустое значение). Эта мысль заслуживает неоднократного повторения. Многие разработчики попадают в ловушку при попытке выбрать данные из таблицы с применением условного оператора по отношению к пустому столбцу. К сожалению, Oracle в ответ на этот запрос не генерирует сообщение об ошибке (на что можно… Читать ещё >
Работа с пустыми значениями (реферат, курсовая, диплом, контрольная)
Пустое значение (null) означает отсутствие какого-либо значения в столбце, в противоположность нулю или пробелам. Приведем простой пример. В компании служащие отдела сбыта получают жалование в зависимости от выработки, а не фиксированный оклад. Поэтому столбец salary (жалование) всех сотрудников этого отдела — незаполненный или пустой. Проблема состоит в том, что ПУСТОЕ ЗНАЧЕНИЕ НИЧЕГО НЕ СОДЕРЖИТ. К пустым значениям нельзя применять логические операторы. Например, следующий запрос работать не будет: select emp_last_name from emp.
where salary = null; no rows selected.
Очень важно отметить, что столбец с пустым значением никогда ничему не будет равен (включая пустое значение). Эта мысль заслуживает неоднократного повторения. Многие разработчики попадают в ловушку при попытке выбрать данные из таблицы с применением условного оператора по отношению к пустому столбцу. К сожалению, Oracle в ответ на этот запрос не генерирует сообщение об ошибке (на что можно было бы надеяться). Для выполнения проверки на пустое значение в языке SQL предусмотрен оператор IS NULL (hhh IS NOT NULL для получения всех строк, в которые внесены данные), как показано в следующем примере:
select emp Jast.name from emp.
where salary is null;
EMP LAST NAME SIM.
ANNUNZIATO.
Кроме того, любое выражение, основанное на пустом значении, возвратит пустое значение. Например, следующий запрос должен представить запланированную оплату груда для всех служащих в компании.
select emp_Iast_name, salary + sales_quota * commission_rate.
from emp.
where dept_no = 60.
order by salary + sales quota * commission rate; EMP_LAST_MAME SALARY+SALES_QUOTA* COMMISSION. RATE.
FARRELL.
MATTEO 414 897.
SIM.
Этот запрос возвращает пустые значения для всех служащих, кроме коммерческого директора, который получает и жалование, и комиссионные. Функция nvl Oracle исправляет эту ситуацию, указывая запросу, чтобы он подставил определенное значение в любом случае, если будет найдено пустое значение. Для этой функции требуются два аргумента: столбец, который может быть пустым, и подставляемое значение, которое должно использоваться взамен всех пустых значений. Следующий запрос может использоваться для получения значения для каждой строки, где одним из компонентов в выражении могло быть пустое значение: select emp _last_name,.
nvl (salary, 0) + nvl (sales_quota, 0) * nvl (commission_rate, 0) from emp.
where dept_no = 60.
order by nvl (salary, 0) + nvl (sales_quota, 0) * nvl (commlssion_rate, 0);
EMP LAST NAME NVL (SALARY.0HNVL (SALES OUOTA. O)* NVLtCOMMISSION RATE, 0).
SIM 94 362.75.
ANNUNZIATO 135 534.15.
FARRELL 206 412.35.
MATTEO 414 897.
Для выборки данных, в которых значение является (или не является) элементом множества значении, используйте оператор IN или not in, как показано в следующих примерах: select emp_ last_ паше from emp.
where dept_.no in (30,40);
EMPJLASTJSAME.
BRUNNER.
BROWN.
SMITH.
JONES.
OBRIEN.
GIARDINA select dept_no, dept_name from dept.
where location not in ('NEW YORK', 'CHICAGO');
DEPT NO DEPT NAME 40 BROADCAST OPERATIONS.
30 HOSPITAL SERVICES.