Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 1 - ОБЗОР баз данных Oracle.doc
Скачиваний:
96
Добавлен:
15.05.2015
Размер:
921 Кб
Скачать
☆

Обработка значений null

Иногда в результате запроса информации получается "пустой" результат. В терминах баз данных "пусто" называется NULL. В теории множеств, матема­тическом фундаменте реляционных баз данных, NULL представляет значение пустого набора данных (множества) или множества, не содержащего значений. Другими словами, NULL — это не символ пробела, отображаемый при нажатии вами соответствующей клавиши, и не что-то эквивалентное нулю! NULL обозначает отсутствие информации. Пока явно не указывается что-то другое, столбец таблицы проектируется таким образом, что в нем не размеще­но никакой информации. Пример выборки значения NULL иллюстрируется столбцом MGR следующего блока кода в строке EMPNO 7839:

SQL> select empno, ename, mgr

2 from emp;

EMPNO ENAME MGR

7369 SMITH 7902

7499 ALLEN 7698

7521 WARD 7698

7566 JONES 7839

7654 MARTIN 7693

7698 BLAKE 7839

7782 CLARK 7839

7788 SCOTT 7566

7839 KING

7844 TURNER 7698

7876 ADAMS 7788

7900 JAMES 7698

7902 FORD 7566

7934 MILLER 7782

Однако бывают случаи, когда мы желаем заменить NULL на некоторое значение. Для таких случаев в Oracle имеется функциональная возможность, реализуемая с помощью специальной функции, называемой nvl ( ). Допустим, вы не хотите видеть пробелы на месте информации о менеджере, которому подчиняется сотрудник- Вы желаете, чтобы взамен значения NULL в выходных данных запроса выводился нуль (0). В следующем блоке кода приводится запрос, с помощью которого можно добиться желаемого результата:

SQI> select empno, ename, nvl (mgr ,0)

2 from emp;

EMPNO ENAME NVL(MGR,0)

7369 SMITH 7902

7499 ALLEN 7698

7521 WARD 7698

7566 JONES 7839

7654 MARTIN 7698

7698 BLAKE 7339

7782 CLARK 7839

7788 SCOTT 7566

7839 KING 0

7844 TURNER 7698

7876 ADAMS 7788

7900 JAMES 7698

7902 FORD 7566

7934 MILLER 77S2

В общем случае синтаксис для функции nvl { } имеет следующий вид: NVL(имя_cтолбцa, значение_если_пи11). Обратите внимание на то, что указанный в nvl ( ) столбец содержит реальное значение. Это значение равняется тому, которое возвращает Oracle; если же значение столбца равно NULL, возвращается специальная строка. Функцию nvl { ) можно использовать-для столбцов, содержащих любые типы данных, однако следует помнить, что специфицированное (указанное) значение, которое будет возвращено в том случае, если значение столбца — NULL, должно быть того же типа, который был задан для столбца.

Ключевое слово distinct

Если мы вернемся к тому блоку кода, где были перечислены все сотрудники из таблицы ЕМР, то обнаружим кое-что интересное в столбце JOB (должность). Многие сотрудники имеют одинаковые названия занимаемых должностей. Иногда может возникнуть ситуация, когда вам для какого-либо столбца потребуются только уникальные значения, хотя вы знаете, что в нем имеется множество повторяющихся значений. Для того чтобы это можно было сделать, Oracle предлагает ключевое слово distinct. Для получения уникальных значений столбца, содержащего дубликаты (повторяющиеся значения), вы должны всего лишь указать во фразе columns перед ссылкой на столбец ключевое слово distinct, например, следующим образом:

SQL> select distinct job

2 from emp;

JOB

ANALYST

CLERK

MANAGER

PRESIDENT

SALESMAN

Совет Чтобы ключевое слово distinct сработало, в SQL-запросе оно должно появиться непосредственно после ключевого слова select.

Если после ключевого слова distinct в операторе select появляется более одного имени столбца, Oracle пытается определить все различающиеся сочета­ния в названных столбцах. Взгляните на пример:

SQL> select distinct job, empno

  1. from emp;

JOB EMPNO

ANALYST 7778

ANALYST 7902

CLERK 7369

CLERK 7876

CLERK 7900

CLERK 7934

MANAGER 7566

MANAGER 7698

MANAGER 7782

PRESIDENT 7839

SALESMAN 7499

SALESMAN 7521

SALESMAN 7654

SALESMAN 7844