Summary -

In this topic, we described about the NVL Function with detailed example.

NVL function is used to replace NULL values in the existing table with specified value in result set. NVL function works on ORACLE database. NVL function returns numeric or string values based on the scenario.

Syntax -

SELECT NVL (Expression1, Expression2|Value) FROM table; 
  • Expression1 – It represents the name of the expression or column name on which we want to test NULL values.
  • Expression2 – It represents the name of the expression or column name which we want to insert values on nullable column.
  • Value – It represents the value that we need to specify on required column which have the NULL values.

Example –

Let us consider below table(s) as an example table(s) to frame the SQL query for getting the desired results.

employee_details -

emp_id emp_name designation manager_id date_of_hire salary dept_id
001 Employee1 Director 2019-07-11 45000.00 1000
002 Employee2 Director 2019-07-11 40000.00 2000
003 Employee3 Manager Employee1 2019-07-11 27000.00 1000
004 Employee4 Manager Employee2 2019-10-08 25000.00 2000
005 Employee5 Analyst Employee3 2019-07-11 20000.00 1000
006 Employee6 Analyst Employee3 2019-10-08 18000.00 1000
007 Employee7 Clerk Employee3 2019-07-11 15000.00 1000
008 Employee8 Salesman Employee4 2019-09-09 14000.00 2000
009 Employee9 Salesman Employee4 2019-10-08 13000.00 2000

Scenario – Replacing NULL values in the existing table with specified value in result set by using NVL function.

Requirement - Replacing NULL values in employee_details with specified value in result set by using NVL function. The query was as follows –

SELECT emp_id, emp_name, NVL(manager_id,'Employee0') manager_id 
FROM  employee_details; 

By executing above query, we can get specified value on manager_id column in employee_details table because it consists NULL values. The output was as follows -

emp_id emp_name manager_id
001 Employee1 Employee0
002 Employee2 Employee0
003 Employee3 Employee1
004 Employee4 Employee2
005 Employee5 Employee3
006 Employee6 Employee3
007 Employee7 Employee3
008 Employee8 Employee4
009 Employee9 Employee4

Scenario – Replacing NOT NULL values in the existing table with specified value in result set by using NVL function.

Requirement - Replacing NOT NULL values in employee_details with specified value in result set by using NVL function. The query was as follows –

SELECT NVL(emp_id,001)emp_id,emp_name FROM employee_details; 

By executing above query, we can get existing emp_id values on employee_details because emp_id column does not have NULL values. The output was as follows -

emp_id emp_name
001 Employee1
002 Employee2
003 Employee3
004 Employee4
005 Employee5
006 Employee6
007 Employee7
008 Employee8
009 Employee9

Scenario – If we trying to combine multiple columns which have NULL values getting without NULL values in result set on existing table by using NVL function.

Requirement – If we trying to add emp_id, emp_name, manager_id, designation columns on employee_details table without getting NULL values by using NVL function. The query was as follows –

SELECT emp_name+ NVL(manager_id, ' ')+ designation 'NAME WITH 
DESIGNATION' FROM employee_details; 

By executing above query, we can get output without NULL values in result set from employee_details table. The output was as follows –

NAME WITH DESIGNATION
Employee1 Director
Employee2 Director
Employee3Employee1Manager
Employee4Employee2Manager
Employee5Employee3Analyst
Employee6Employee3Analyst
Employee7Employee3Clerk
Employee8Employee4Salesman
Employee9Employee4Salesman

Scenario – Replacing NULL values in the existing table with another specified column value in result set by using NVL.

Requirement – Replacing NULL values in employee_details with designation value in result set by using NVL. The query was as follows –

SELECT  emp_id,emp_name,NVL(manager_id,designation )manager_id 
FROM employee_details; 

By executing above query we can replace NULL values on manager_id column in existing employee_details table with designation column values. The output was as follows -

emp_id emp_name manager_id
001 Employee1 Director
002 Employee2 Director
003 Employee3 Employee1
004 Employee4 Employee2
005 Employee5 Employee3
006 Employee6 Employee3
007 Employee7 Employee3
008 Employee8 Employee4
009 Employee9 Employee4