Database
 sql >> Datenbank >  >> RDS >> Database

Effektiver Umgang mit NULL-Werten mit der SQL COALESCE-Funktion für Anfänger

Dieser Artikel soll Anfängern helfen, die Grundlagen der T-SQL COALESCE-Funktion und ihrer Anwendung für die Verarbeitung von NULL-Werten zu verstehen. Darüber hinaus werden die Leser praktische Erfahrungen sammeln, indem sie einige einfache Beispiele dieser Funktion implementieren.

Wir werden auch die Bedeutung von T-SQL-Funktionen bei der Lösung von Datenbankanalyseproblemen hervorheben.

Über die SQL COALESCE-Funktion

Lassen Sie uns zunächst versuchen, diese Funktion aus der Sicht eines SQL-Anfängers zu verstehen.

Was ist die SQL COALESCE-Funktion?

Es ist eine T-SQL-Funktion, die viele Eingaben akzeptiert, aber den ersten Eingabewert zurückgibt, der NICHT NULL ist .

Was ist die Eingabe?

Eine Eingabe (auch als Argument bezeichnet) kann alles sein, was einer Funktion zugeführt wird, was diese Funktion benötigt, um ihre Aufgabe zu erledigen.

Beispiel:Wir haben eine Funktion namens SUM() , das zwei beliebige Zahlen X addiert und Y . Diese Zahlen sind Eingänge oder Argumente der Funktion.

Eine Eingabe oder ein Argument kann ein Ausdruck sein.

Was ist ein Ausdruck?

Ein Ausdruck kann eine Konstante, eine Variable oder eine Spalte sein, die letztendlich einen einzelnen Datenwert zurückgibt.

Wir konzentrieren uns jedoch besonders auf die Spalten aus der Datenbankperspektive, die Werte enthalten können oder auch nicht.

Was ist ein Nullwert?

Jeder Wert, der einer Tabellenspalte noch zugewiesen werden muss, ist eine NULL Wert. Mit anderen Worten, NULL bedeutet einen nicht initialisierten Wert einer Spalte in der Tabelle .

Was ist ein NOT NULL-Wert?

Es ist das Gegenteil des NULL-Wertes. Wenn der NULL-Wert ein nicht zugewiesener oder nicht initialisierter Spaltenwert ist, ist der NOT NULL-Wert ein zugewiesener oder der initialisierte Spaltenwert .

Beispiel:Wir haben zwei Spalten, ExamId und Prüfungsergebnis , in einer Tabelle.

Ein Nutzer legt ExamId=1 fest , liefert aber keinen Wert für ExamResult Säule. Dann Prüfungsergebnis wird NULL enthalten. Alternativ ExamId hat NICHT NULL Wert, weil er 1 ist.

Wie funktioniert die COALESCE-Funktion?

Es ist eine Funktion, die den ersten NOT NULL-Wert der Spalte anzeigt in der Liste der an diese Funktion übergebenen Spalten. Wir können jedoch jede Menge von Ausdrücken an diese Funktion übergeben, die eine Liste der Tabellenspalten oder eine einfache Menge von Zahlen (Konstanten) oder Variablen sein kann.

Syntax

Die SQL-Syntax der COALESCE-Funktion (gemäß Microsoft-Dokumentation) lautet wie folgt:

COALESCE ( expression [ ,...n ] )   

Wir haben bereits einen Ausdruck definiert, sodass er eine beliebige Anzahl von Ausdrücken des gleichen Typs akzeptieren kann.

Kompatibilität

Laut Microsoft-Dokumentation ist diese Funktion mit vielen Microsoft SQL-Technologien kompatibel, einschließlich der folgenden:

  1. Alle unterstützten Versionen von SQL Server.
  2. Azure SQL-Datenbank (Cloud-Version von SQL Server).

Beachten Sie, dass ich absichtlich einige andere SQL Server-Technologien ausgeschlossen habe, um den Kontext einfach zu halten.

Einfache Beispiele der COALESCE-Funktion

Lassen Sie uns eine Beispieldatenbank einrichten, in der wir unsere Beispiele ausführen können. Erstellen Sie eine neue Datenbank namens „CoalesceDB“, um Ihre Beispiele damit auszuführen. Verwenden Sie den folgenden Code:

-- Create sample database
Create DATABASE CoalesceDB;
GO

„Zahl mit NULL“-Beispiel

Wenn wir eine Zahl und einen NULL-Wert in beliebiger Reihenfolge an die COALESCE-Funktion übergeben, gibt sie die Zahl zurück, da es sich um den ersten NICHT-NULL-Wert handelt .

Verwenden Sie das T-SQL-Skript wie folgt für die Beispieldatenbank:

-- Use the sample database
USE CoalesceDB

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

Sie sollten die folgenden Ergebnisse erhalten:

Wenn wir die Reihenfolge der Argumente so umkehren, dass die Zahl 1 zuerst kommt und NULL das zweite Argument wird, erhalten wir immer noch dasselbe Ergebnis:

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

„String with a NULL“-Beispiel

Hier übergeben wir eine Zeichenfolge (Zeichentypdaten) und eine NULL an diese Funktion, um die Ergebnisse anzuzeigen. Führen Sie das folgende Skript aus:

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

Die Ergebnisse sind unten:

In ähnlicher Weise erhalten wir durch Umkehren der Reihenfolge die gleichen Ergebnisse wie im vorherigen Beispiel.

„Zwei Zahlen und eine NULL“-Beispiel

Sehen wir uns das Verhalten der COALESCE-Funktion an, wenn wir dieser Funktion die drei Eingaben (Argumente), darunter zwei Zahlen und einen NULL-Wert, zuführen.

Führen Sie das folgende Skript für das Beispiel mit zwei Zahlen und einem NULL-Wert aus:

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

Die Ausgabe sieht wie folgt aus:

Seit dem ersten NOT Nullwert ist 2 , die COALESCE-Funktion hat es zurückgegeben und den Wert danach ignoriert.

Lassen Sie uns nun die Reihenfolge der Zahlen in der Liste der Argumente mit dem folgenden Skript umkehren:

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

Die Ergebnismenge ist unten:

„Zahl, Zeichenfolge und ein NULL“-Beispiel

Hier mischen wir die Argumenttypen, indem wir eine Zahl, einen String und einen NULL-Wert eingeben. Geben Sie den folgenden Code ein:

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

Die Ergebnisse lauten wie folgt:

Obwohl die COALESCE-Funktion die richtigen Ergebnisse anzeigt und den ersten NOT NULL-Wert, der 1 ist, aufnimmt, ist dies kein gutes Beispiel. Wir sollten die gleiche Art von Argumenten liefern. Es sind entweder Zahlen oder Zeichen oder jede andere Art von Ausdruck.

Wenn wir als erstes Argument die Zeichenfolge „Home“ und als zweites Argument die Zahl 1 angeben, führt dies zu einem Fehler. Deshalb sollten die Ausdrücke vom gleichen Typ sein.

Lassen Sie uns dies versuchen, indem wir die beiden NOT NULL-Argumente vertauschen:

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

Die Ausgabe ist unten:

„Zwei Zeichenfolgen mit NULL“-Beispiel

Wenn wir einen NULL-Wert eingeben, gefolgt von zwei Zeichenfolgenwerten, wird die erste Zeichenfolge zurückgegeben, da sie NICHT NULL ist. Es wird das zweite auslassen. Führen Sie das folgende Skript aus, um es in Aktion zu sehen:

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

Die Ergebnismenge ist unten:

Das obige Beispiel beweist, dass genaue Ergebnisse erfordern, dass die gleiche Art von Argumenten an die COALESCE-Funktion geliefert wird. Ein Argument selbst kann eine Zahl, ein String, eine Variable oder eine Spalte der Tabelle sein.

Reale Beispiele

Jetzt nehmen wir ein einfaches reales Szenario der COALESCE-Funktion, die NULL-Werte effektiv verarbeitet.

Ein IT-Dienstleistungsunternehmen speichert die Daten seiner Kunden, die in die folgenden zwei Kategorien fallen:

  1. Geschäftskunden.
  2. Einzelkunden.

Ein Geschäftskunde ist ein Kunde, der ein Unternehmen vertritt. Sie bestellen im Auftrag des Unternehmens (Geschäft). Ein Einzelkunde ist eine Person, die Dienstleistungen persönlich und für den persönlichen Gebrauch bestellt.

Die Kontakte der Geschäftskunden befinden sich in der Kundentabelle unter der Spalte Arbeit_E-Mail. Die E-Mail-Adressen der persönlichen Kunden befinden sich in der Spalte Personal_Email der Tabelle.

Daher wird für jeden Kunden je nach Typ entweder die Spalte Work_Email oder Personal_Email ausgefüllt.

Erstellen Sie die Kundentabelle

Wir erstellen eine Tabelle mit dem Namen „Kunde“ in der Beispieldatenbank CoalesceDB. Geben Sie das folgende Skript ein:

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

Füllen Sie die Kundentabelle aus

Lassen Sie uns die Kundentabelle mit dem folgenden Skript füllen:

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

Sehen Sie sich die Kundentabelle an

Führen Sie das folgende Skript aus:

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

Die Ausgabe sieht wie folgt aus:

Alle verfügbaren Kontakte mit COALESCE anzeigen

Wenn wir nun alle verfügbaren Kontakte aller Kunden sehen möchten, NULL ignorierend, können wir dies erreichen, indem wir die COALESCE-Funktion wie folgt verwenden:

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

Die Ergebnisse sind:

Dinge zu tun

Herzliche Glückwünsche! Sie kennen die Grundlagen der COALESCE-Funktion und verstehen ihre Verwendung beim effektiven Umgang mit NULL-Werten.

Jetzt möchten Sie vielleicht die neuen Fähigkeiten weiter trainieren:

  1. Versuchen Sie, zwei weitere Spalten, Work_Phone und Personal_Phone, in der Customer-Tabelle zu erstellen und zu füllen. Sehen Sie anhand des realen Beispiels, ob Sie NULL-Werte in diesen Spalten verarbeiten könnten.
  2. Versuchen Sie, eine SQL-Ansicht zu erstellen, um Ihnen alle verfügbaren E-Mail-Kontakte der Kunden anzuzeigen.
  3. Versuchen Sie, alle vier Spalten (E-Mail geschäftlich, E-Mail privat, Telefon geschäftlich und Telefon privat) an die Funktion zu übergeben. Natürlich müssen Sie sicherstellen, dass sie alle den gleichen Datentyp haben. Sehen Sie sich die Ergebnisse selbst an.

Lesen Sie auch

Eine praktische Verwendung der SQL COALESCE-Funktion

Top-Antworten auf 5 brennende Fragen zur SQL COALESCE-Funktion