Coalesce In SQL: Leitfaden mit nützlichen Tipps, Beispielen und mehr

Auch wenn man sich Structured Query Language (SQL) manchmal als Datenbanksystem vorstellt, ist das nicht ganz richtig.

Stattdessen wird SQL zum Verwalten von Informationen in Datenbanken verwendet, was es zu einem relationalen Datenbankverwaltungssystem (RDBMS) macht.

Vor diesem Hintergrund besteht sein Hauptzweck darin, mithilfe vordefinierter Funktionen Informationen aus Datenbanken zu extrahieren, die auf vom Benutzer übermittelten Abfragen basieren.

Jeder, der mit SQL gearbeitet hat, ist wahrscheinlich mit den grundlegenden Befehlen wie SELECT, AND OR, WHERE und HAVING vertraut. Wenn es um das Konzept der Definition von NULL-Bedingungen geht, sind die meisten Programmierer jedoch eher mit der ISNULL-Funktion als mit COALESCE vertraut.

Obwohl COALESCE nicht ausreichend genutzt wird, handelt es sich um eine leistungsstarke, fortschrittliche Logikfunktion, deren Fähigkeiten über die verwandten NULL-Befehle hinausgehen. Wann und wie sollten Sie COALESCE in SQL verwenden? Im Folgenden gehen wir die Grundlagen durch, um Ihnen den Einstieg zu erleichtern.

Schnelle Navigation
Die COALESCE-FunktionKOALESZIEREN & FALL Die ISNULL-FunktionSQL Server ISNULLMySQL ISNULLCOALESCE vs. ISNULLZusätzliche COALESCE-RessourcenMicrosoftMSSQLTips.comTeamSQLTutorial-GatewayPaketüberflussMit COALESCE

Die COALESCE-Funktion

Mit COALESCE in SQL Server oder MySQL können Sie ein Objekt – also eine Tabelle – in einer relationalen Datenbank durchsuchen, bis Sie den ersten Nicht-NULL-Wert finden. Sie wird oft als Ähnlichkeit mit der ISNULL-Funktion angesehen, daher werden wir etwas später weiter unten auf die Unterschiede zwischen den beiden eingehen.

Um COALESCE zu verwenden, würden Sie schreiben:

COALESCE („Ausdruck 1“, „Ausdruck 2“, …)

Um dies in Aktion zu sehen, nehmen wir an, wir haben die folgenden Kontaktinformationen in einer Tabelle namens Email_Info:

Name​

Geschäftliche E-Mail

School_email

Persönliche E-Mail​​​​

Justin

[email protected]

[email protected]

[email protected]

Keith

NULL

[email protected]

[email protected]

Andy

NULL

NULL

[email protected]

Führen wir nun eine Suche durch, um die bevorzugte E-Mail-Adresse für die Kontaktaufnahme mit diesen Personen gemäß den folgenden drei Regeln zu finden:

  • 1Wenn eine geschäftliche E-Mail-Adresse vorhanden ist, verwenden Sie diese.
  • 2Wenn keine geschäftliche E-Mail-Adresse vorhanden ist, verwenden Sie die E-Mail-Adresse der Schule.
  • 3Wenn keine geschäftliche oder schulische E-Mail-Adresse, aber eine private E-Mail-Adresse vorhanden ist, verwenden Sie diese.

Dann können wir COALESCE verwenden, um eine Suche mit diesen Parametern in der Tabelle Email_Info durchzuführen:

SELECT Name, COALESCE (Business_email, School_email, Personal_email) Contact_Email FROM Email_Info;

Schließlich hätten wir diese Ergebnisse als Abfrageausgabe:

Name

Kontakt E-mail

Justin

[email protected]

Keith

[email protected]

Andy

[email protected]

KOALESZIEREN & FALL

Wie Sie vielleicht bereits bemerkt haben, ist COALESCE der CASE-Funktion sehr ähnlich, die die If-Then-Else-Logik verwendet, um Daten auszuwerten und anschließend einen Wert zurückzugeben, wenn die erste einer Reihe von Bedingungen erfüllt ist. Dafür gibt es einen guten Grund: COALESCE ist eigentlich eine Abkürzung für die CASE-Funktion. Werfen wir noch einmal einen Blick auf die Syntax der COALESCE-Funktion:

COALESCE („Ausdruck 1“, „Ausdruck 2“, …)

Die Verwendung von CASE zur Durchführung derselben Suche würde wie folgt aussehen:

FALL

WHEN (Ausdruck1 ist nicht NULL) DANN Ausdruck1

WHEN (Ausdruck2 ist nicht NULL) DANN Ausdruck2

ELSE-Ausdruck

ENDE

Wenn Sie also CASE zum Durchführen dieser Art von Datenbankabfragen verwendet haben, können Sie mit COALESCE dieselbe Aktion mit weniger Code ausführen.

Die ISNULL-Funktion

Um zu verstehen, wie sich COALESCE von der ISNULL-Funktion unterscheidet, mit der es üblicherweise verglichen wird, müssen wir einen kurzen Blick auf die Funktionsweise von ISNULL werfen. Das hängt jedoch davon ab, ob Sie SQL Server oder MySQL verwenden, beides RDMBS.

SQL Server ISNULL

In SQL Server wird ISNULL verwendet, um einen NULL-Wert durch einen anderen Wert zu ersetzen. Beispielsweise könnte ich die folgende Tabelle mit dem Namen „Class_Data“ haben:

Klassennummer

Studenten

1301-1

27

1301-2

30

1301-3

NULL

Um die Gesamtzahl der Schüler zu berechnen und den NULL-Wert durch eine Zahl meiner Wahl zu ersetzen, würde ich Folgendes in SQL schreiben:

SELECT SUM (ISNULL(Students,25)) FROM Class_Data;

Dann würde ich das folgende Ergebnis erhalten, indem ich 27 + 30 + 25 addiere (die Zahl, die den NULL-Wert ersetzt):

SUM (ISNULL(Studenten,25))

82

MySQL ISNULL

In MySQL wird ISNULL jedoch verwendet, um zu bestimmen, ob ein Ausdruck NULL ist oder nicht. Ich könnte zum Beispiel die folgenden zwei Abfragen schreiben:

ISNULL(4*4)

ISNULL(4*0)

Beim ersten Ausdruck ist 4 x 4 16 – kein NULL-Wert – das Ergebnis wäre also:

ISNULL(4*4) gibt 0 zurück

Beim zweiten Ausdruck ist 4 x 0 0 – ein NULL-Wert – das Ergebnis wäre also:

ISNULL(4*0) gibt 1 zurück

COALESCE vs. ISNULL

Während sowohl COALESCE als auch ISNULL Werte zurückgeben, die auf NULL- oder Nicht-NULL-Abfrageergebnissen basieren, gibt es einige wichtige Unterschiede zwischen den beiden:

  • 1COALESCE ist ein Standard des American National Standards Institute (ANSI), ISNULL jedoch nicht.
  • 2ISNULL wertet Daten nur einmal aus, während COALESCE dies mehrmals tut.
  • 3ISNULL kann nur zwei Parameter verwenden, COALESCE kann jedoch eine variable Zahl verwenden.
  • 4Der Datentyp des ersten Parameters wird von ISNULL verwendet. COALESCE folgt CASE-Regeln, die den Datentypwert mit der höchsten Priorität zurückgeben.
  • 5Validierungen werden unterschiedlich durchgeführt. Eine ISNULL, die NULL ist, wird in eine Ganzzahl (int) konvertiert. Bei Verwendung von COALESCE muss ein Datentyp angegeben werden.
  • 6Die NULL-Fähigkeit des Ergebnisausdrucks ist ebenfalls unterschiedlich. Ein ISNULL-Rückgabewert wird immer als NICHT NULL-fähig betrachtet. Nicht-NULL-Parameter werden bei Verwendung von COALESCE als NULL betrachtet.

Zusätzliche COALESCE-Ressourcen

Nachdem wir nun die Grundlagen der Verwendung von COALESCE, seine Beziehung zu CASE und den Unterschied zu ISNULL besprochen haben, möchten Sie wahrscheinlich noch mehr über die Verwendung erfahren. Die folgenden Websites bieten detaillierte Artikel und Tutorials, ausführliche Codebeispiele und praktische Tipps für die Verwendung.

Microsoft

SQL Server und MySQL sind Microsoft-Produkte. Ein guter Ausgangspunkt ist daher die COALESCE-Dokumentation auf der Website des Unternehmens. Neben einem detaillierten Überblick über COALESCE gibt es vier Codebeispiele – zwei einfache und zwei komplexe –, die die Verwendung der Funktion veranschaulichen:

  • 1Einfach: Benutzen die AdventureWorks2012-Datenbankwird eine Suche durchgeführt, um den ersten Nicht-NULL-Wert in einer Spalte zurückzugeben.
  • 2Komplex: Nachdem eine Tabelle mit drei Spalten für Stundenlohn, Gehalt und Provision erstellt wurde, wird eine Suche nach den gezahlten Gesamtgehältern durchgeführt.
  • 3Einfach: Nachdem eine Tabelle mit Informationen zu Bekleidungsprodukten durchsucht wurde, wird erläutert, warum die Ergebnismenge aufgrund fehlender definierter Parameter unerwartete Informationen enthält.
  • 4Komplex: Die Gehaltstabelle aus Beispiel 2 oben wird erneut abgefragt, diesmal nur nach Nicht-NULL-Werten in ihren Spalten.

MSSQLTips.com

Auf MSSQLTips.com gibt es zwei nützliche Artikel: „Die vielfältigen Einsatzmöglichkeiten von COALESCE in SQL Server“ und „Entscheidung zwischen COALESCE und ISNULL in SQL Server“. Jeder Artikel beginnt mit einer expliziten Problemstellung und der Rest des Artikels bietet eine detaillierte Diskussion und Lösung.

Der erste bietet einen grundlegenden Überblick über COALESCE. Anschließend folgt eine Diskussion mit Beispielen, die zeigen, wie diese Funktion zum Pivotieren von Daten aus der AdventureWorks2012-Datenbank verwendet werden kann.

Anschließend erfahren Sie, wie Sie COALESCE mit mehreren Argumenten verwenden und mehrere SQL-Anweisungen ausführen. Sie sollten sich auch die ausführlichen Leserkommentare am Ende des Artikels ansehen, die relevante Themen und Probleme bei der Fehlerbehebung behandeln.

Der zweite Artikel beginnt mit einer kurzen Diskussion, einschließlich Codebeispielen, die zeigen, wie die Funktionen COALESCE und ISNULL die Datenpriorität unterschiedlich nutzen. Anschließend veranschaulichen weitere erweiterte Beispiele dieser Funktionen in Aktion die wichtigsten Leistungsunterschiede. Auch hier sollten Sie sich die Kommentare am Ende ansehen, die nützliche Informationen bieten.

Denken Sie außerdem, dass ISNULL auf SQL Server immer schneller läuft als COALESCE? Es gibt einige aufschlussreiche Ergebnisse aus vier verschiedenen, einfachen Tests mit zwei Variablen, die 500.000 Mal durchgeführt wurden, um die Laufzeiten zu vergleichen:

  • 1Beide NULL-Argumente
  • 2Erstes Argument NULL
  • 3Zweites Argument NULL
  • 4Keines der Argumente NULL

COALESCE war in den ersten beiden Tests schneller, der dritte war unentschieden und ISNULL war im letzten Test schneller.

TeamSQL

Dieser Artikel beginnt mit einer Beschreibung der COALESCE-Funktion. Danach gibt es zwei detaillierte Beispiele, die verschiedene Szenarien zeigen, in denen es nützlich ist: die Ermittlung der Kundengebühren bei einem Internetdienstanbieter und die Verarbeitung des unbenannten Dienstes eines Kunden als Abfrageergebnis.

Eine hervorragende Funktion ist die Einbindung von Screenshots sowohl der Tabellen als auch des verwendeten Codes, anstatt diese Informationen nur auf der Webseite selbst zu haben.

Tutorial-Gateway

Um einige zusätzliche Funktionen der COALESCE-Funktion kennenzulernen, sollten Sie sich dieses Tutorial ansehen, das auch Screenshots zur Darstellung der Ein- und Ausgabe verwendet.

Zunächst gibt es ein Beispiel mit String-Daten. Dann verwendet das zweite Beispiel numerische Daten. Abschließend gibt es ein praktisches Beispiel, das eine Mitarbeiter-Kontaktinformationsdatenbank abfragt – ähnlich wie das obige Beispiel zum Sortieren von E-Mail-Adressen – jedoch mit viel mehr Datenfeldern.

Paketüberfluss

COALESCE und ISNULL behandeln die Datenpriorität nicht nur unterschiedlich, die Datenpriorität von COALESCE kann sich auch ändern, wenn es auf MySQL im Vergleich zu SQL Server ausgeführt wird, obwohl es sich um eine handelt ANSI-Standard.

Wenn Sie Fehlermeldungen über die Konvertierung von Varchar-Werten in Ganzzahlen generieren, ist dies einen Blick wert.

Mit COALESCE

Selbst erfahrene SQL Server- und MySQL-Programmierer sind möglicherweise nicht so vertraut mit der COALESCE-Funktion und den Möglichkeiten, die sie bietet.

Das Endziel des Codierens ist jedoch immer dasselbe: möglichst leistungsfähige Programme mit möglichst wenig Code zu schreiben.

Zu diesem Zweck sollten Sie wann immer möglich COALESCE verwenden, um die oben beschriebenen Arten von Suchen und Abfragen durchzuführen.

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen