sql >> Base de Datos >  >> RDS >> Database

Manejar los valores NULL de manera efectiva con la función SQL COALESCE para principiantes

Este artículo tiene como objetivo ayudar a los principiantes a comprender los conceptos básicos de la función T-SQL COALESCE y su aplicación para manejar valores NULL. Además, los lectores obtendrán experiencia práctica al implementar algunos ejemplos simples de esta función.

También destacaremos la importancia de las funciones de T-SQL para resolver problemas analíticos de bases de datos.

Acerca de la función SQL COALESCE

Primero, intentemos entender esta función desde el punto de vista de un principiante de SQL.

¿Qué es la función SQL COALESCE?

Es una función T-SQL que acepta muchas entradas pero devuelve el primer valor de entrada que NO es NULO .

¿Cuál es la entrada?

Una entrada (también llamada argumento) puede ser cualquier cosa suministrada a una función requerida por esa función para hacer su trabajo.

por ejemplo, tenemos una función llamada SUM() , que suma dos números cualesquiera X y Y . Estos números son entradas o argumentos de la función.

Una entrada o argumento puede ser una expresión.

¿Qué es una expresión?

Una expresión puede ser una constante, una variable o una columna que finalmente devuelve un único valor de datos.

Sin embargo, estamos particularmente enfocados en las columnas desde la perspectiva de la base de datos, que pueden o no contener valores.

¿Qué es un valor nulo?

Cualquier valor que aún no se haya asignado a la columna de una tabla es NULL valor. En otras palabras, NULO significa un valor no inicializado de una columna en la tabla .

¿Qué es un valor NO NULO?

Es lo opuesto al valor NULL. Si el valor NULL es un valor de columna no asignado o no inicializado, el valor NOT NULL es un valor de columna asignado o inicializado .

p. ej., tenemos dos columnas, ExamId y Resultado del examen , en una tabla.

Un usuario establece ExamId=1 , pero no proporciona ningún valor a ExamResult columna. Luego Resultado del examen tendrá NULL en él. Alternativamente, ExamId tiene NO NULO valor porque es 1.

¿Cómo funciona la función COALESCE?

Es una función que muestra el primer valor NOT NULL de la columna en la lista de las columnas pasadas a esta función. Sin embargo, podemos pasar cualquier conjunto de expresiones, que puede ser una lista de las columnas de la tabla o un simple conjunto de números (constantes) o variables a esta función.

Sintaxis

La sintaxis SQL de la función COALESCE (según la documentación de Microsoft) es la siguiente:

COALESCE ( expression [ ,...n ] )   

Ya hemos definido una expresión para que pueda aceptar cualquier número de expresiones del mismo tipo.

Compatibilidad

Según la documentación de Microsoft, esta función es compatible con muchas tecnologías de Microsoft SQL, incluidas las siguientes:

  1. Todas las versiones compatibles de SQL Server.
  2. Azure SQL Database (versión en la nube de SQL Server).

Tenga en cuenta que he excluido deliberadamente algunas otras tecnologías de SQL Server para mantener el contexto simple.

Ejemplos simples de la función COALESCE

Configuremos una base de datos de muestra donde podamos ejecutar nuestros ejemplos. Cree una nueva base de datos llamada 'CoalesceDB' para ejecutar sus ejemplos en ella. Utilice el siguiente código:

-- Create sample database
Create DATABASE CoalesceDB;
GO

Ejemplo de 'Número con NULL'

Si pasamos un número y un valor NULO a la función COALESCE en cualquier orden, devolverá el número porque es el primer valor NO NULO .

Use el script T-SQL contra la base de datos de muestra de la siguiente manera:

-- Use the sample database
USE CoalesceDB

-- Simple COALESCE example with number and NULL inputs (arguments) 
SELECT COALESCE(NULL,1) as COALESCE_Result

Deberías obtener los siguientes resultados:

Si invertimos el orden de los argumentos de tal manera que el número 1 sea el primero y NULL se convierta en el segundo argumento, obtenemos el mismo resultado:

-- Simple COALESCE example with Number and NULL while number being first input (arguments) 
SELECT COALESCE(1,NULL) as COALESCE_Result_Number_First

Ejemplo de 'Cadena con NULL'

Aquí pasaremos una cadena (datos de tipo carácter) y un NULL a esta función para ver los resultados. Ejecute el siguiente script:

-- Simple COALESCE example with string and NULL inputs (arguments) 
SELECT COALESCE(NULL,'Second input') as COALESCE_Result

Los resultados están a continuación:

Del mismo modo, invertir el orden nos dará los mismos resultados que en el ejemplo anterior.

Ejemplo de 'Dos números y un NULL'

Veamos el comportamiento de la función COALESCE si proporcionamos las tres entradas (argumentos), incluidos dos números y un valor NULL, a esta función.

Ejecute el siguiente script para el ejemplo con dos números y un valor NULL:

-- Simple COALESCE example with two numbers and NULL inputs (arguments) 
SELECT COALESCE(NULL,2,3) as COALESCE_Result

La salida es la siguiente:

Desde el primer NO valor nulo es 2 , la función COALESCE lo ha devuelto, ignorando el valor posterior.

Invirtamos ahora el orden de los números en la lista de argumentos con el siguiente script:

-- Simple COALESCE example with two numbers reversed and NULL inputs (arguments) 
SELECT COALESCE(NULL,3,2) as COALESCE_Result 

El conjunto de resultados está a continuación:

Ejemplo de 'Número, cadena y NULL'

Aquí mezclamos los tipos de argumentos ingresando un número, una cadena y un valor NULL. Escribe el siguiente código:

-- Simple COALESCE example with one number one string and NULL inputs (arguments) 
SELECT COALESCE(NULL,1,'Home') as COALESCE_Result

Los resultados son los siguientes:

Aunque la función COALESCE muestra los resultados correctos, tomando el primer valor NOT NULL, que es 1, no es un buen ejemplo. Deberíamos proporcionar el mismo tipo de argumentos. Ya sean números o caracteres o cualquier otro tipo de expresión.

Si proporcionamos la cadena 'Inicio' como primer argumento y el número 1 como segundo argumento, se producirá un error. Por eso las expresiones deben ser del mismo tipo.

Probemos esto intercambiando los dos argumentos NOT NULL:

-- Simple COALESCE example with one number one string first and NULL inputs (arguments) 
SELECT COALESCE(NULL,'Home',1) as COALESCE_Result

El resultado es el siguiente:

Ejemplo de 'Dos cadenas con un NULL'

Si ingresamos un valor NULL seguido de dos valores de cadena, devolverá la primera cadena porque NO es NULL. Dejará el segundo fuera. Ejecute el siguiente script para verlo en acción:

-- Simple COALESCE example with two strings and NULL inputs (arguments) 
SELECT COALESCE(NULL,'Home','Office') as COALESCE_Result

El conjunto de resultados está a continuación:

El ejemplo anterior demuestra que los resultados precisos requieren proporcionar el mismo tipo de argumentos a la función COALESCE. Un argumento en sí mismo puede ser un número, una cadena, una variable o una columna de la tabla.

Ejemplos de casos reales

Ahora tomamos un escenario de caso real simple de la función COALESCE que maneja valores NULL de manera efectiva.

Una empresa proveedora de servicios de TI almacena los datos de sus clientes y se divide en las siguientes dos categorías:

  1. Clientes comerciales.
  2. Clientes individuales.

Un cliente comercial es un cliente que representa a una empresa. Realizan pedidos en nombre de la empresa (negocio). Un cliente individual es una persona que solicita servicios personalmente y para uso personal.

Los contactos de los clientes comerciales se encuentran en la tabla Cliente en la columna Work_Email. Las direcciones de correo electrónico de los clientes personales se encuentran en la columna Personal_Email de la tabla.

Por lo tanto, completa la columna Work_Email o Personal_Email para cada cliente, según el tipo.

Crear la tabla de clientes

Crearemos una tabla llamada "Cliente" en la base de datos de ejemplo CoalesceDB. Escriba el siguiente script:

-- Using the sample database
Use CoalesceDB

-- Create Customer table
CREATE TABLE Customer
(CustomerId INT IDENTITY(1,1),
Work_Email VARCHAR(250) NULL,
Personal_Email VARCHAR(250) NULL,
CONSTRAINT [PK_Customer] PRIMARY KEY ([CustomerId]) 
)

Rellenar la tabla de clientes

Completemos la tabla de clientes usando el siguiente script:

-- Using the sample database
Use CoalesceDB

-- Populate Customer table
INSERT INTO Customer
(Work_Email,Personal_Email)
values
('[email protected]',NULL),
(NULL,'[email protected]'),
(NULL,'[email protected]'),
('[email protected]',NULL),
('[email protected]',NULL),
(NULL,'[email protected]')

-- Important: Please note the above email addresses are for demo purposes only

Ver la tabla de clientes

Ejecute el siguiente script:

-- View customer table
SELECT [CustomerId], [Work_Email], [Personal_Email] FROM dbo.Customer

La salida es la siguiente:

Ver todos los contactos disponibles usando COALESCE

Ahora, si quisiéramos ver todos los contactos disponibles de todos los clientes, ignorando los NULL, podemos lograr esto usando la función COALESCE de la siguiente manera:

--Viewing all available contacts using COALESCE 
SELECT C.CustomerId,COALESCE(Work_Email,Personal_Email) AS Email
FROM dbo.Customer C

Los resultados son:

Cosas que hacer

¡Felicidades! Tiene los conceptos básicos de la función COALESCE y comprende su uso para manejar los valores NULL de manera efectiva.

Ahora, es posible que desee entrenar más las nuevas habilidades:

  1. Intente crear y completar dos columnas más, Work_Phone y Personal_Phone, en la tabla Customer. Vea si puede manejar valores NULOS en estas columnas utilizando el ejemplo del caso real.
  2. Intente crear una vista SQL para mostrarle todos los contactos de correo electrónico disponibles de los clientes.
  3. Intente pasar las cuatro columnas (Work_Email, Personal_Email, Work_Phone y Personal_Phone) a la función. Por supuesto, debe asegurarse de que todos tengan el mismo tipo de datos. Vea los resultados usted mismo.

Leer también

Un uso práctico de la función SQL COALESCE

Principales respuestas a 5 preguntas candentes sobre la función SQL COALESCE