Основы программирования в СУБД Oracle. SQL+PL/SQL.. О. А. Ткачев
Чтение книги онлайн.

Читать онлайн книгу Основы программирования в СУБД Oracle. SQL+PL/SQL. - О. А. Ткачев страница 22

СКАЧАТЬ Зарплата таких сотрудников рассчитывается по формуле: Salary * (1 + commission_pct). У сотрудников, которым комиссионные не полагаются, значение столбца commission_pct не может быть определено.

      При работе с арифметическими и логическими выражениями следует иметь в виду следующее: арифметическое выражение вернет значение NULL, если один или несколько операндов будут иметь значение NULL; результатом операции сравнения будет NULL, если один или оба операнда будут иметь значение NULL.

      Результат логических операций AND и OR приведен в таблицах 3.9 и 3.10 соответственно.

      Таблица 3.9. Таблица истинности логической функции AND с учетом значений NULL

      Таблица 3.10. Таблица истинности логической функции OR с учетом значений NULL

      Для корректной обработки данных, которые могут иметь значения NULL, следует использовать специальные функции.

      Функция NVL

      Позволяет заменить значение NULL фактическим значением. Синтаксис:

      NVL (x,y)

      Возвращает x, если x не NUUL, и возвращает y, если x имеет значение NUUL, например: NVL (commission_pct,0).

      Рассмотрим примеры использования функции NVL при решении конкретных задач.

      Пример 3.43. Вывести данные о сотрудниках, включая размер комиссионных, которые работают в отделах 30 и 80

      SELECT employee_id, first_name, last_name, department_id,

      salary, NVL (commission_pct,0)

      FROM Employees

      WHERE department_id IN (30,80)

      ORDER BY department_id;

      Пример 3.44. Вывести данные о сотрудниках, включая зарплату с учетом комиссионных (полная зарплата), которые работают в отделах 30 и 80, упорядочив их в порядке убывания значений зарплаты с учетом комиссионных

      SELECT employee_id, first_name, last_name, department_id,

      salary* (1+NVL (commission_pct,0)) AS total_salary

      FROM Employees

      WHERE department_id IN (30,80)

      ORDER BY total_salary DESC;

      Псевдонимы столбцов можно использовать в предложении ORDER BY, но нельзя использовать в предложении WHERE.

      Пример 3.45. Вывести данные о сотрудниках, включая зарплату с учетом комиссионных, полная зарплата которых больше 15 000, упорядочив их в порядке убывания значений полной зарплаты

      SELECT employee_id, first_name, last_name, department_id,

      salary* (1+NVL (commission_pct,0)) AS total_salary

      FROM Employees

      WHERE total_salary> 15000

      ORDER BY total_salary DESC;

      Правильный вариант решения задачи 3.45:

      SELECT employee_id, first_name, last_name, department_id,

      salary* (1+NVL (commission_pct,0)) AS total_salary

      FROM Employees

      WHERE salary* (1+NVL (commission_pct,0))> 15000

      ORDER BY total_salary DESC;

      Функция NVL2

      Расширяет возможности функции NVL. Синтаксис:

      NVL2 (x,y1,y2)

      Возвращает y1, если x не NUUL, и возвращает y2, если x имеет значение NUUL.

      Например:

СКАЧАТЬ