sql >> Databasteknik >  >> RDS >> Database

Hantera NULL-värdena effektivt med SQL COALESCE-funktionen för nybörjare

Den här artikeln syftar till att hjälpa nybörjare att förstå grunderna i T-SQL COALESCE-funktionen och dess tillämpning för hantering av NULL-värden. Dessutom kommer läsarna att få praktisk erfarenhet genom att implementera några enkla exempel på denna funktion.

Vi kommer också att belysa vikten av T-SQL-funktioner för att lösa databasanalytiska problem.

Om SQL COALESCE-funktionen

Låt oss först försöka förstå den här funktionen från en SQL-nybörjarsynpunkt.

Vad är SQL COALESCE-funktionen?

Det är en T-SQL-funktion som accepterar många indata men returnerar det första ingångsvärdet som INTE är NULL .

Vad är ingången?

En input (även kallad ett argument) kan vara vad som helst som tillhandahålls till en funktion som krävs av den funktionen för att göra sitt jobb.

t.ex. har vi en funktion som heter SUM() , som lägger till två valfria nummer X och Y . Dessa siffror är indata eller argument för funktionen.

En input eller argument kan vara ett uttryck.

Vad är ett uttryck?

Ett uttryck kan vara en konstant, en variabel eller en kolumn som i slutändan returnerar ett enda datavärde.

Vi är dock särskilt fokuserade på kolumnerna ur databasperspektivet, som kan innehålla eller inte innehålla värden.

Vad är ett nollvärde?

Alla värden som ännu inte har tilldelats en tabells kolumn är NULL värde. Med andra ord, NULL betyder ett oinitierat värde för en kolumn i tabellen .

Vad är ett NOT NULL-värde?

Det är motsatsen till NULL-värdet. Om NULL-värdet är ett otilldelat eller oinitierat kolumnvärde, är NOT NULL-värdet ett tilldelat eller det initialiserade kolumnvärdet .

t.ex. Vi har två kolumner, ExamId och ExamResult , i en tabell.

En användare ställer in ExamId=1 , men ger inget värde till ExamResult kolumn. Sedan ExamResult kommer att ha NULL i den. Alternativt ExamId har INTE NULL värde eftersom det är 1.

Hur fungerar COALESCE-funktionen?

Det är en funktion som visar det första NOT NULL-värdet i kolumnen i listan över kolumner som skickas vidare till denna funktion. Däremot kan vi skicka vilken uppsättning uttryck som helst, som kan vara en lista över tabellkolumnerna eller en enkel uppsättning tal (konstanter) eller variabler till den här funktionen.

Syntax

SQL-syntaxen för COALESCE-funktionen (enligt Microsofts dokumentation) är som följer:

COALESCE ( expression [ ,...n ] )   

Vi har redan definierat ett uttryck så att det kan acceptera valfritt antal uttryck av samma typ.

Kompatibilitet

Enligt Microsofts dokumentation är den här funktionen kompatibel med många Microsoft SQL-tekniker, inklusive följande:

  1. Alla versioner av SQL Server som stöds.
  2. Azure SQL Database (SQL Server molnversion).

Observera att jag medvetet har uteslutit några andra SQL Server-teknologier för att göra sammanhanget enkelt.

Enkla exempel på COALESCE-funktionen

Låt oss skapa en exempeldatabas där vi kan köra våra exempel. Skapa en ny databas som heter 'CoalesceDB' för att köra dina exempel mot den. Använd följande kod:

-- Create sample database
Create DATABASE CoalesceDB;
GO

'Nummer med NULL' Exempel

Om vi ​​skickar ett nummer och ett NULL-värde till COALESCE-funktionen i valfri ordning, kommer det att returnera talet eftersom det är det första NOT NULL-värdet .

Använd T-SQL-skriptet mot exempeldatabasen enligt följande:

-- Use the sample database
USE CoalesceDB

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

Du bör få följande resultat:

Om vi ​​vänder om ordningen på argumenten på ett sådant sätt att nummer 1 kommer först, och NULL blir det andra argumentet, får vi fortfarande samma resultat:

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

'Sträng med ett NULL'-exempel

Här skickar vi en sträng (teckentypsdata) och en NULL till denna funktion för att se resultatet. Kör följande skript:

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

Resultaten är nedan:

På samma sätt kommer omvänd ordning att ge oss samma resultat som i föregående exempel.

'Två siffror och ett NULL'-exempel

Låt oss se COALESCE-funktionens beteende om vi tillhandahåller de tre indata (argument), inklusive två siffror och ett NULL-värde, till denna funktion.

Kör följande skript för exemplet med två siffror och ett NULL-värde:

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

Utgången är som följer:

Sedan första NOT Null-värdet är 2 , COALESCE-funktionen har returnerat det, och ignorerar värdet efter det.

Låt oss nu vända om ordningen på siffrorna i argumentlistan med följande skript:

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

Resultatuppsättningen är nedan:

'Nummer, sträng och ett NULL'-exempel

Här blandar vi ihop argumenttyperna genom att mata in ett nummer, en sträng och ett NULL-värde. Skriv in följande kod:

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

Resultaten är följande:

Även om COALESCE-funktionen visar de korrekta resultaten och plockar upp det första NOT NULL-värdet, vilket är 1, är det inte ett bra exempel. Vi bör tillhandahålla samma typ av argument. Det är antingen siffror eller tecken eller någon annan typ av uttryck.

Om vi ​​anger strängen "Hem" som det första argumentet och siffran 1 som det andra argumentet, kommer det att orsaka ett fel. Det är därför uttrycken bör vara av samma typ.

Låt oss prova detta genom att byta ut de två NOT NULL-argumenten:

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

Utdata är nedan:

'Två strängar med NULL' Exempel

Om vi ​​matar in ett NULL-värde följt av två strängvärden kommer det att returnera den första strängen eftersom den INTE är NULL. Det kommer att utelämna den andra. Kör följande skript för att se det i aktion:

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

Resultatuppsättningen är nedan:

Exemplet ovan bevisar att korrekta resultat kräver att samma typ av argument till funktionen COALESCE anges. Ett argument i sig kan vara ett tal, en sträng, en variabel eller en kolumn i tabellen.

Exempel i verkliga fall

Nu tar vi ett enkelt scenario där COALESCE-funktionen hanterar NULL-värden effektivt.

Ett företag som tillhandahåller IT-tjänster lagrar sina kunders uppgifter och delas in i följande två kategorier:

  1. Företagskunder.
  2. Enskilda kunder.

En företagskund är en kund som representerar ett företag. De lägger beställningar på uppdrag av företaget (företaget). En enskild kund är en person som beställer tjänster personligen och för personligt bruk.

Företagskunders kontakter finns i tabellen Kund under kolumnen Work_Email. De personliga kundernas e-postadresser finns i kolumnen Personal_Email i tabellen.

Därför fyller den antingen kolumnen Work_Email eller Personal_Email för varje kund, beroende på typ.

Skapa kundtabellen

Vi skapar en tabell som heter "Kund" i exempeldatabasen CoalesceDB. Skriv följande skript:

-- 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]) 
)

Fyll i kundtabellen

Låt oss fylla i kundtabellen med följande skript:

-- 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

Visa kundtabellen

Kör följande skript:

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

Utgången är som följer:

Visa alla tillgängliga kontakter med COALESCE

Om vi ​​nu skulle vilja se alla tillgängliga kontakter för alla kunder, ignorera NULLs, kan vi uppnå detta genom att använda COALESCE-funktionen enligt följande:

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

Resultaten är:

Saker att göra

Grattis! Du har grunderna i COALESCE-funktionen och förstår dess användning för att hantera NULL-värdena effektivt.

Nu kanske du vill träna de nya färdigheterna ytterligare:

  1. Försök att skapa och fylla i ytterligare två kolumner, Work_Phone och Personal_Phone, i Kundtabellen. Se om du kan hantera NULL-värden i dessa kolumner med hjälp av exemplet i verkliga fall.
  2. Försök att skapa en SQL-vy för att visa dig alla tillgängliga e-postkontakter för kunderna.
  3. Försök att skicka in alla fyra kolumnerna (ArbetsE-post, Personlig_E-post, Arbetstelefon och Personlig_Telefon) till funktionen. Naturligtvis måste du se till att alla har samma datatyp. Se resultatet själv.

Läs också

En praktisk användning av SQL COALESCE-funktionen

De bästa svaren på 5 brännande frågor om SQL COALESCE-funktion


  1. Aggregerad funktion i MySQL - lista (som LISTAGG i Oracle)

  2. Länk till Salesforce Data i Microsoft Access

  3. Hur håller data inte sorteras?

  4. Optimera Microsoft Access med SQL Server IndyPass – 21/5/19