Denne artikel har til formål at hjælpe begyndere med at forstå det grundlæggende i T-SQL COALESCE-funktionen og dens applikation til håndtering af NULL-værdier. Derudover vil læserne få praktisk erfaring ved at implementere nogle simple eksempler på denne funktion.
Vi vil også fremhæve betydningen af T-SQL-funktioner til at løse database analytiske problemer.
Om SQL COALESCE-funktionen
Lad os først prøve at forstå denne funktion fra en SQL-begynders synspunkt.
Hvad er SQL COALESCE-funktionen?
Det er en T-SQL-funktion, der accepterer mange input, men returnerer den første inputværdi, der IKKE er NULL .
Hvad er inputtet?
Et input (også kaldet et argument) kan være hvad som helst, der leveres til en funktion, der kræves af den pågældende funktion for at udføre sit arbejde.
f.eks. har vi en funktion kaldet SUM() , som tilføjer to vilkårlige tal X og Y . Disse tal er input eller argumenter for funktionen.
Et input eller argument kan være et udtryk.
Hvad er et udtryk?
Et udtryk kan være en konstant, en variabel eller en kolonne, der i sidste ende returnerer en enkelt dataværdi.
Vi er dog særligt fokuseret på kolonnerne fra databaseperspektivet, som måske indeholder værdier eller ikke.
Hvad er en nulværdi?
Enhver værdi, der endnu ikke er tildelt til en tabels kolonne, er en NULL værdi. Med andre ord, NULL betyder en ikke-initialiseret værdi af en kolonne i tabellen .
Hvad er en NOT NULL-værdi?
Det er det modsatte af NULL-værdien. Hvis NULL-værdien er en ikke-tildelt eller ikke-initialiseret kolonneværdi, er NOT NULL-værdien en tildelt eller initialiseret kolonneværdi .
f.eks. har vi to kolonner, ExamId og Eksamensresultat , i en tabel.
En bruger indstiller ExamId=1 , men giver ingen værdi til Eksamensresultatet kolonne. Derefter Eksamensresultat vil have NULL i det. Alternativt ExamId har IKKE NULL værdi, fordi den er 1.
Hvordan virker COALESCE-funktionen?
Det er en funktion, der viser den første NOT NULL-værdi i kolonnen i listen over de kolonner, der er videregivet til denne funktion. Vi kan dog sende ethvert sæt udtryk, som kan være en liste over tabelkolonnerne eller et simpelt sæt tal (konstanter) eller variabler til denne funktion.
Syntaks
SQL-syntaksen for COALESCE-funktionen (i henhold til Microsoft-dokumentationen) er som følger:
COALESCE ( expression [ ,...n ] )
Vi har allerede defineret et udtryk, så det kan acceptere et hvilket som helst antal af samme type udtryk.
Kompatibilitet
Ifølge Microsofts dokumentation er denne funktion kompatibel med mange Microsoft SQL-teknologier, herunder følgende:
- Alle understøttede versioner af SQL Server.
- Azure SQL Database (SQL Server-skyversion).
Bemærk, at jeg bevidst har udelukket et par andre SQL Server-teknologier for at holde konteksten enkel.
Enkle eksempler på COALESCE-funktionen
Lad os oprette en prøvedatabase, hvor vi kan køre vores eksempler. Opret en ny database kaldet 'CoalesceDB' for at køre dine eksempler mod den. Brug følgende kode:
-- Create sample database
Create DATABASE CoalesceDB;
GO
Eksempel på ‘Nummer med NULL’
Hvis vi sender et tal og en NULL-værdi til COALESCE-funktionen i en hvilken som helst rækkefølge, returnerer den tallet, fordi det er den første NOT NULL-værdi .
Brug T-SQL-scriptet mod eksempeldatabasen som følger:
-- 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ølgende resultater:
Hvis vi vender om rækkefølgen af argumenterne på en sådan måde, at nummer 1 kommer først, og NULL bliver det andet argument, får vi stadig det samme resultat:
-- Simple COALESCE example with Number and NULL while number being first input (arguments)
SELECT COALESCE(1,NULL) as COALESCE_Result_Number_First
Eksempel på ‘String with a NULL’
Her sender vi en streng (tegntypedata) og en NULL til denne funktion for at se resultaterne. Kør følgende script:
-- Simple COALESCE example with string and NULL inputs (arguments)
SELECT COALESCE(NULL,'Second input') as COALESCE_Result
Resultaterne er nedenfor:
Tilsvarende vil vende rækkefølgen give os de samme resultater som i det foregående eksempel.
Eksempel på ‘To tal og et NULL’
Lad os se COALESCE-funktionens adfærd, hvis vi leverer de tre input (argumenter), inklusive to tal og en NULL-værdi, til denne funktion.
Kør følgende script til eksemplet med to tal og én NULL-værdi:
-- Simple COALESCE example with two numbers and NULL inputs (arguments)
SELECT COALESCE(NULL,2,3) as COALESCE_Result
Outputtet er som følger:
Siden den første NOT Null-værdien er 2 , COALESCE-funktionen har returneret den og ignorerer værdien efter den.
Lad os nu vende rækkefølgen af tallene i argumenternes liste med følgende script:
-- Simple COALESCE example with two numbers reversed and NULL inputs (arguments)
SELECT COALESCE(NULL,3,2) as COALESCE_Result
Resultatsættet er nedenfor:
Eksempel på 'Nummer, streng og et NULL'
Her blander vi argumenttyperne ved at indtaste et tal, en streng og en NULL-værdi. Indtast følgende kode:
-- Simple COALESCE example with one number one string and NULL inputs (arguments)
SELECT COALESCE(NULL,1,'Home') as COALESCE_Result
Resultaterne er som følger:
Selvom COALESCE-funktionen viser de korrekte resultater, opfanger den første NOT NULL-værdi, som er 1, er det ikke et godt eksempel. Vi bør levere den samme type argumenter. Det er enten tal eller tegn eller en hvilken som helst anden type udtryk.
Hvis vi angiver strengen 'Hjem' som det første argument og tallet 1 som det andet argument, vil det forårsage en fejl. Derfor skal udtrykkene være af samme type.
Lad os prøve dette ved at udveksle de to NOT NULL-argumenter:
-- Simple COALESCE example with one number one string first and NULL inputs (arguments)
SELECT COALESCE(NULL,'Home',1) as COALESCE_Result
Outputtet er nedenfor:
Eksempel på ‘To strenge med et NULL’
Hvis vi indtaster en NULL-værdi efterfulgt af to strengværdier, vil den returnere den første streng, fordi den IKKE er NULL. Det vil udelade den anden. Kør følgende script for at se det i aktion:
-- Simple COALESCE example with two strings and NULL inputs (arguments)
SELECT COALESCE(NULL,'Home','Office') as COALESCE_Result
Resultatsættet er nedenfor:
Ovenstående eksempel beviser, at nøjagtige resultater kræver at levere den samme type argumenter til COALESCE-funktionen. Et argument i sig selv kan være et tal, en streng, en variabel eller en kolonne i tabellen.
Eksempler i virkeligheden
Nu tager vi et simpelt real-case scenarie, hvor COALESCE-funktionen håndterer NULL-værdier effektivt.
En virksomhed, der tilbyder it-tjenester, gemmer sine kunders detaljer og falder i følgende to kategorier:
- Erhvervskunder.
- Individuelle kunder.
En erhvervskunde er en kunde, der repræsenterer en virksomhed. De afgiver ordrer på vegne af virksomheden (virksomheden). En individuel kunde er en person, der bestiller tjenester personligt og efter personlig brug.
Erhvervskundernes kontakter er i kundetabellen under kolonnen Work_Email. De personlige kunders e-mailadresser er i kolonnen Personal_Email i tabellen.
Derfor udfylder den enten Work_Email- eller Personal_Email-kolonnen for hver kunde, afhængigt af typen.
Opret kundetabellen
Vi opretter en tabel kaldet 'Kunde' i eksempeldatabasen CoalesceDB. Indtast følgende 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])
)
Udfyld kundetabellen
Lad os udfylde kundetabellen ved hjælp af følgende 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
Se kundetabellen
Kør følgende script:
-- View customer table
SELECT [CustomerId], [Work_Email], [Personal_Email] FROM dbo.Customer
Outputtet er som følger:
Visning af alle tilgængelige kontakter ved hjælp af COALESCE
Nu, hvis vi gerne vil se alle de tilgængelige kontakter for alle kunder, ignorerer NULLs, kan vi opnå dette ved at bruge COALESCE-funktionen som følger:
--Viewing all available contacts using COALESCE
SELECT C.CustomerId,COALESCE(Work_Email,Personal_Email) AS Email
FROM dbo.Customer C
Resultaterne er:
Ting at gøre
Tillykke! Du har det grundlæggende i COALESCE-funktionen og forstår dens anvendelse til at håndtere NULL-værdierne effektivt.
Nu vil du måske træne de nye færdigheder yderligere:
- Prøv at oprette og udfylde yderligere to kolonner, Work_Phone og Personal_Phone, i kundetabellen. Se om du kunne håndtere NULL-værdier i disse kolonner ved at bruge eksemplet i virkelige tilfælde.
- Prøv at oprette en SQL-visning for at vise dig alle tilgængelige e-mail-kontakter fra kunderne.
- Prøv at overføre alle fire kolonner (Work_Email, Personal_Email, Work_Phone og Personal_Phone) til funktionen. Du skal selvfølgelig sikre dig, at de alle har samme datatype. Se resultaterne selv.
Læs også
En praktisk brug af SQL COALESCE-funktionen
Topsvar på 5 brændende spørgsmål om SQL COALESCE-funktion