sql >> Database >  >> RDS >> Database

Effectief omgaan met de NULL-waarden met de SQL COALESCE-functie voor beginners

Dit artikel is bedoeld om beginners te helpen de basisprincipes van de T-SQL COALESCE-functie en de toepassing ervan voor het omgaan met NULL-waarden te begrijpen. Bovendien zullen de lezers praktische ervaring opdoen door enkele eenvoudige voorbeelden van deze functie te implementeren.

We zullen ook het belang van T-SQL-functies benadrukken bij het oplossen van analytische databaseproblemen.

Over de SQL COALESCE-functie

Laten we eerst proberen deze functie te begrijpen vanuit het oogpunt van een SQL-beginner.

Wat is de SQL COALESCE-functie?

Het is een T-SQL-functie die veel invoer accepteert, maar de eerste invoerwaarde retourneert die NIET NULL is .

Wat is de invoer?

Een invoer (ook wel een argument genoemd) kan alles zijn dat wordt geleverd aan een functie die die functie nodig heeft om zijn werk te doen.

bijv. We hebben een functie genaamd SUM() , die twee willekeurige getallen X . toevoegt en J . Deze getallen zijn invoer of argumenten van de functie.

Een invoer of argument kan een uitdrukking zijn.

Wat is een uitdrukking?

Een expressie kan een constante, een variabele of een kolom zijn die uiteindelijk een enkele gegevenswaarde retourneert.

We zijn echter vooral gefocust op de kolommen vanuit het databaseperspectief, die al dan niet waarden kunnen bevatten.

Wat is een nulwaarde?

Elke waarde die nog moet worden toegewezen aan de kolom van een tabel is een NULL waarde. Met andere woorden, NULL betekent een niet-geïnitialiseerde waarde van een kolom in de tabel .

Wat is een NIET NULL-waarde?

Het is het tegenovergestelde van de NULL-waarde. Als de NULL-waarde een niet-toegewezen of niet-geïnitialiseerde kolomwaarde is, is de NOT NULL-waarde een toegewezen of de geïnitialiseerde kolomwaarde .

bijv. We hebben twee kolommen, ExamId en Examenresultaat , in een tabel.

Een gebruiker stelt ExamId=1 . in , maar geeft geen waarde aan het ExamResult kolom. Dan ExamResult zal NULL erin hebben. U kunt ook ExamId heeft NIET NULL waarde omdat het 1 is.

Hoe werkt de COALESCE-functie?

Het is een functie die de eerste NOT NULL-waarde van de kolom toont in de lijst met kolommen die aan deze functie zijn doorgegeven. We kunnen echter elke reeks uitdrukkingen, zoals een lijst met tabelkolommen of een eenvoudige reeks getallen (constanten) of variabelen, aan deze functie doorgeven.

Syntaxis

De SQL-syntaxis van de COALESCE-functie (volgens de Microsoft-documentatie) is als volgt:

COALESCE ( expression [ ,...n ] )   

We hebben al een uitdrukking gedefinieerd zodat deze een willekeurig aantal uitdrukkingen van hetzelfde type kan accepteren.

Compatibiliteit

Volgens Microsoft-documentatie is deze functie compatibel met veel Microsoft SQL-technologieën, waaronder de volgende:

  1. Alle ondersteunde versies van SQL Server.
  2. Azure SQL Database (SQL Server-cloudversie).

Merk op dat ik bewust een paar andere SQL Server-technologieën heb uitgesloten om de context eenvoudig te houden.

Eenvoudige voorbeelden van de COALESCE-functie

Laten we een voorbeelddatabase opzetten waarin we onze voorbeelden kunnen uitvoeren. Maak een nieuwe database met de naam 'CoalesceDB' om uw voorbeelden erop uit te voeren. Gebruik de volgende code:

-- Create sample database
Create DATABASE CoalesceDB;
GO

'Getal met een NULL' Voorbeeld

Als we een getal en een NULL-waarde doorgeven aan de COALESCE-functie in een willekeurige volgorde, wordt het getal geretourneerd omdat het de eerste NIET NULL-waarde is .

Gebruik het T-SQL-script als volgt voor de voorbeelddatabase:

-- Use the sample database
USE CoalesceDB

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

U zou de volgende resultaten moeten krijgen:

Als we de volgorde van de argumenten zodanig omkeren dat nummer 1 eerst komt, en NULL het tweede argument, krijgen we nog steeds hetzelfde resultaat:

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

'Tekenreeks met een NULL' Voorbeeld

Hier zullen we een string (karaktertype data) en een NULL doorgeven aan deze functie om de resultaten te zien. Voer het volgende script uit:

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

De resultaten staan ​​hieronder:

Evenzo zal het omkeren van de volgorde ons dezelfde resultaten opleveren als in het vorige voorbeeld.

'Twee cijfers en een NULL' voorbeeld

Laten we eens kijken naar het gedrag van de functie COALESCE als we de drie ingangen (argumenten), inclusief twee getallen en een NULL-waarde, aan deze functie leveren.

Voer het volgende script uit voor het voorbeeld met twee getallen en één NULL-waarde:

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

De uitvoer is als volgt:

Sinds de eerste NIET Null-waarde is 2 , de COALESCE-functie heeft het geretourneerd en de waarde erna genegeerd.

Laten we nu de volgorde van de getallen in de lijst met argumenten omkeren met het volgende script:

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

De resultatenset staat hieronder:

'Getal, String en een NULL' Voorbeeld

Hier verwarren we de argumenttypes door een getal, string en een NULL-waarde in te voeren. Typ de volgende code:

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

De resultaten zijn als volgt:

Hoewel de functie COALESCE de juiste resultaten toont en de eerste NOT NULL-waarde oppikt, die 1 is, is dit geen goed voorbeeld. We zouden dezelfde soort argumenten moeten aanleveren. Het zijn cijfers of tekens of een ander type uitdrukking.

Als we de string 'Home' als eerste argument opgeven en het cijfer 1 als tweede argument, zal er een fout optreden. Daarom moeten de uitdrukkingen van hetzelfde type zijn.

Laten we dit proberen door de twee NOT NULL-argumenten uit te wisselen:

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

De uitvoer is hieronder:

'Twee strings met een NULL' voorbeeld

Als we een NULL-waarde invoeren gevolgd door twee tekenreekswaarden, wordt de eerste tekenreeks geretourneerd omdat deze NIET NULL is. Het zal de tweede weglaten. Voer het volgende script uit om het in actie te zien:

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

De resultatenset staat hieronder:

Het bovenstaande voorbeeld bewijst dat nauwkeurige resultaten het leveren van hetzelfde type argumenten aan de COALESCE-functie vereisen. Een argument zelf kan een getal, tekenreeks, variabele of een kolom van de tabel zijn.

Voorbeelden uit de praktijk

Nu nemen we een eenvoudig real-case scenario van de COALESCE-functie die effectief omgaat met NULL-waarden.

Een bedrijf dat IT-diensten levert, slaat de gegevens van zijn klanten op en valt in de volgende twee categorieën:

  1. Zakelijke klanten.
  2. Individuele klanten.

Een zakelijke klant is een klant die een bedrijf vertegenwoordigt. Zij plaatsen bestellingen namens het bedrijf (zakelijk). Een individuele klant is een persoon die persoonlijk en voor persoonlijk gebruik diensten bestelt.

De contactpersonen van de zakelijke klanten staan ​​in de tabel Klant onder de kolom Werk_e-mail. De e-mailadressen van de persoonlijke klanten staan ​​in de kolom Personal_Email van de tabel.

Daarom wordt de kolom Work_Email of Personal_Email voor elke klant ingevuld, afhankelijk van het type.

Maak de klantentabel

We maken een tabel met de naam 'Klant' in de voorbeelddatabase CoalesceDB. Typ het volgende 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]) 
)

Vul de klantentabel

Laten we de klantentabel vullen met het volgende 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

Bekijk de klantentabel

Voer het volgende script uit:

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

De uitvoer is als volgt:

Alle beschikbare contacten bekijken met COALESCE

Als we nu alle beschikbare contacten van alle klanten willen zien, NULL's negerend, kunnen we dit bereiken door de COALESCE-functie als volgt te gebruiken:

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

De resultaten zijn:

Dingen om te doen

Gefeliciteerd! Je hebt de basis van de COALESCE-functie en begrijpt het gebruik ervan bij het effectief omgaan met de NULL-waarden.

Nu wil je misschien de nieuwe vaardigheden verder trainen:

  1. Probeer nog twee kolommen te maken en in te vullen, Work_Phone en Personal_Phone, in de tabel Klant. Kijk of je NULL-waarden in deze kolommen kunt verwerken met behulp van het echte voorbeeld.
  2. Probeer een SQL-weergave te maken om u alle beschikbare e-mailcontacten van de klanten te laten zien.
  3. Probeer alle vier de kolommen (Work_Email, Personal_Email, Work_Phone en Personal_Phone) door te geven aan de functie. Natuurlijk moet u ervoor zorgen dat ze allemaal hetzelfde gegevenstype hebben. Bekijk de resultaten zelf.

Lees ook

Een praktisch gebruik van de SQL COALESCE-functie

Topantwoorden op 5 brandende vragen over de SQL COALESCE-functie


  1. 2 manieren om alle tabelwaardige functies in een SQL Server-database op te sommen

  2. De achtergrondkleur van een formulierheader wijzigen in Access 2016

  3. Dynamische draaitabel maken met de functie QUOTENAME

  4. Hoe ASIN() werkt in MariaDB