Funciones COALESCE e ISNULL en SQL Server

SQL Server ha introducido múltiples formas de manejar valores NULL. Las funciones que se utilizan más para manejar NULL son COALESCE e ISNULL en SQL Server. Estas funciones se utilizan para encontrar valores No NULOS de una lista de argumentos. En esta publicación, veremos los usos de las funciones ISNULL y COALESCE y sus diferencias con ejemplos.

Función COALESCE en SQL Server

1. La función COALESCE en el servidor SQL se usa para devolver el primer valor No NULL de la lista de columnas / argumentos dados en orden.

2. COALESCE se considera similar a escribir una expresión de sentencia CASE en SQL.

3. COALESCE es una función estándar ANSI SQL. Está disponible con todos los principales RDBMS incluyendo Oracle, MySQL.

4. Sintaxis - COALESCE (expresión [, ... n])

Función ISNULL en SQL Server

1. ISNULL es una función introducida especialmente en T-SQL para reemplazar un valor NULL con un valor de reemplazo específico.

2. Sintaxis - ISNULL (check_expression, replacement_value)

La diferencia entre ISNULL y COALESCE

1. ISNULL es una función. Por lo tanto, se evalúa una sola vez. COALESCE es una expresión similar a una declaración de caso. Sería evaluado varias veces.

2. La función ISNULL es específica de Microsoft y se introdujo en SQL Server. COALESCE es una función estándar ANSI que es utilizada por todos los RDBMS principales (por ejemplo, Oracle, MySQL).

3. El tipo de datos de retorno para una función ISNULL usa el tipo de datos del primer argumento o segundo argumento si el primer argumento es NULL. Si ambos argumentos son NULOS, devolverá un tipo de datos INTEGER. COALESCE, siguiendo las reglas de las sentencias de casos, usa el más alto del principio de precedencia para devolver el tipo de datos. COALESCE devuelve un error si todos los parámetros de entrada son NULL.

4. ISNULL toma solo dos parámetros. COALESCE toma un número variable de parámetros.

Ejemplos de funciones COALESCE e ISNULL

Crearemos una tabla de empleados con Id. De empleado, nombre, segundo nombre, apellido, número de contacto y columnas de salario.

Excepto por la columna Empleado (Id), todas las demás columnas se consideran NULABLES.

SI OBJECT_ID ('Empleado') NO ES UNA TABLA DE GOTA NULA Empleado; CREAR TABLA Empleado (Id. INT NO NULA IDENTIDAD (1,1) CLAVE PRIMARIA, Nombre VARCHAR (50) NULL, MiddleName VARCHAR (50) NULL, Apellido VARCHAR (50) NULL, Sin contacto VARCHAR (10) NULL, Salario INT NULL);

Insertar algunos registros en la tabla de empleados

Insertar en valores de empleado ('Vishwanath', NULL, NULL, '9999955555', 12000); Insertar en valores de empleado (NULL, 'Niraj', NULL, '9911223344', 14000); Insertar en valores de empleado (NULL, NULL, 'Chetan', NULL, NULL); Insertar en valores de empleado ('Atul', 'K', NULL, '9876780987', NULL); Insertar en valores de empleado ('Vishal', 'M', 'P', NULL, 12000); 

1. Usando ISNULL - Muestra 'No se da' si ContactNo es NULL en la tabla de empleados

Los siguientes ejemplos recuperan las columnas ID y ContactNo de la tabla de empleados. Si la columna ContactNo es NULL, ContactNo se muestra en el conjunto de resultados como "No se ha dado", usando la función ISNULL para probar los valores NULL en la columna ContactNo.

SELECT Id, ISNULL (ContactNo, 'Not Given') DEL empleado; 
Salida - Id. De conjunto de resultados Nº de contacto 9999955555 2 9911223344 3 No dado 4 9876780987 5 No dado 

2. Uso de ISNULL: establecer el salario en 0, si no se proporciona un salario

Los siguientes ejemplos recuperan la columna de ID y salario anual (salario mensual * 12). Si el salario es NULL, entonces sustitúyalo por 0. Use la función ISNULL para probar los valores NULL en la columna de salario.

SELECT Id, ISNULL (Salario, 0) * 12 como ContactNo DE Employee; 
Salida - Id. De conjunto de resultados ContactNo 1 144000 2 168000 3 0 4 0 5 144000 

3. Usando IS NULL - Encontrar ID de empleados donde el número de contacto es NULL

El siguiente ejemplo utiliza IS NULL (espacio entre IS y NULL) para filtrar los registros en la columna Número de contacto. Donde no se proporciona el número de contacto significa que tienen valores NULL.

SELECT ID, ContactNo como ContactNo DEL empleado WHERE ContactNo IS NULL; 
Salida - Id. De conjunto de resultados ContactNo 3 NULL 5 NULL 

4. El uso de IS NOT NULL: búsqueda de ID de empleados donde Salario NO es NULL

El siguiente ejemplo utiliza IS NOT NULL para filtrar registros en la columna Salario donde Salario NO es NULL o el salario está presente.

SELECCIONE Id., Salario como contactoNo DEL empleado DONDE EL Salario NO ES NULO; 
Salida - ID de conjunto de resultados ContactNo 1 12000 2 14000 5 12000 

5. Uso de la función ISNULL con AVG: para calcular el salario promedio de todos los empleados

El siguiente ejemplo encuentra el salario promedio de todos los empleados, incluidos aquellos a los que no se les ha asignado una cifra de salario (es decir, valores NULL).

SELECCIONE AVG (ISNULL (salario, 0)) DE Empleado; 
Salida - Conjunto de resultados AvgEmpSal 7600 

6. Usando COALESCE - Obtenga el primer valor NOT NULL

El siguiente ejemplo utiliza COALESCE para devolver el primer valor No NULO entre las columnas de nombre, segundo nombre y apellido.

SELECT Id, COALESCE (FirstName, MiddleName, LastName) como FirstNotNullName FROM Employee; 
Salida - Id. De conjunto de resultados FirstNotNullName 1 Vishwanath 2 Niraj 3 Chetan 4 Atul 5 Vishal 

7. Uso de COALESCE: obtenga el primer valor NOT NULL de los argumentos variables

El siguiente ejemplo devuelve el primer valor NOT NULL (es decir, 'Hola').

SELECCIONE COALESCE (NULL, NULL, 'Hola', NULL, 'Hello There') como FirstNotNullValue; 
Salida - Conjunto de resultados FirstNotNullValue Hi There 

8. Usando COALESCE - Pasando todos los valores NULL como Argumento

Si pasamos todos los argumentos como NULL a una función COALESCE, generará un error que indica que al menos un argumento no debe ser la constante nula.

SELECCIONE COALESCE (NULL, NULL, NULL, NULL) como FirstNotNullValue 

Mensaje de error
Mensaje 4127, Nivel 16, Estado 1, Línea 22
Al menos uno de los argumentos de COALESCE debe ser una expresión que no sea la constante NULL.

Lea más sobre la base de datos y la programación de SQL de Tech-Recipes.