CodeGym /Kurse /SQL SELF /Die Funktion NULLIF() — Syntax und Anwendungsbeispiele

Die Funktion NULLIF() — Syntax und Anwendungsbeispiele

SQL SELF
Level 9 , Lektion 4
Verfügbar

Lass uns mal über eine weitere Funktion sprechen, die mit dem mysteriösen NULL arbeitet — NULLIF(). Sie hilft dir in Situationen, in denen bestimmte Werte zu NULL gemacht werden sollen, damit du deine Daten korrekt verarbeiten kannst. Anschnallen, das wird eine spannende Reise!

Die Funktion NULLIF() ist ein super Tool in PostgreSQL, mit dem du zwei Werte vergleichen kannst. Sie gibt NULL zurück, wenn die Werte gleich sind, oder den ersten Wert, wenn sie unterschiedlich sind. Sie sagt quasi: "Wenn die Werte gleich sind, vergessen wir sie einfach!"

Hier ist die einfache Syntax der Funktion:

NULLIF(value1, value2)

Wenn value1 und value2 gleich sind, ist das Ergebnis NULL. Wenn sie unterschiedlich sind, bekommst du value1 zurück.

Beispiel:

SELECT NULLIF(10, 10); -- Ergebnis: NULL
SELECT NULLIF(10, 20); -- Ergebnis: 10
SELECT NULLIF('hello', 'hello'); -- Ergebnis: NULL
SELECT NULLIF('hello', 'world'); -- Ergebnis: 'hello'

Easy, oder? Jetzt lass uns mal schauen, wie man diese Funktion in echten Aufgaben einsetzen kann.

Beispiel 1: Division durch Null verhindern

Division durch Null ist der Albtraum jedes Programmierers. In SQL bekommst du einen Fehler, wenn du durch Null teilst. Genau hier kommt NULLIF() ins Spiel.

Stell dir vor, wir haben eine Tabelle sales mit zwei Spalten: revenue (Einnahmen) und expenses (Ausgaben). Wir wollen die Rentabilität der Ausgaben berechnen (revenue / expenses), aber manchmal sind die Ausgaben null. Wenn wir einfach so eine Query absetzen, gibt es einen Division-by-zero-Fehler.

Tabelle sales:

revenue expenses
1000 200
1500 0
2000 250

Fehlerhafte Query:

SELECT revenue / expenses AS profitability
FROM sales;
-- Fehler: Division durch Null!

Lösung mit NULLIF():

SELECT revenue / NULLIF(expenses, 0) AS profitability
FROM sales;

Ergebnis:

profitability
5.00
NULL
8.00

Jetzt, wenn expenses gleich 0 ist, gibt NULLIF(expenses, 0) NULL zurück, und Division durch NULL verursacht keinen Fehler, sondern gibt einfach NULL zurück.

Beispiel 2: Gleiche Werte durch NULL ersetzen

Stell dir vor, du hast eine Tabelle mit Studentendaten, mit den Spalten first_name und preferred_name. Manchmal bevorzugen Studierende ihren echten Namen, manchmal einen anderen. Wenn beide Namen gleich sind, macht es keinen Sinn, preferred_name anzuzeigen.

Tabelle students:

first_name preferred_name
John Johnny
Anna Anna
Alex Lex

Query mit NULLIF():

SELECT first_name,
       NULLIF(preferred_name, first_name) AS display_name
FROM students;

Ergebnis:

first_name display_name
John Johnny
Anna NULL
Alex Lex

Wenn preferred_name und first_name gleich sind, ist das Ergebnis NULL.

Beispiel 3: Daten filtern

Manchmal willst du nur die Zeilen auswählen, in denen die Werte in zwei Spalten unterschiedlich sind. Zum Beispiel gibt es eine Tabelle mit Bestellungen, mit original_price und discounted_price. Wir wollen die Bestellungen finden, bei denen ein Rabatt angewendet wurde.

Tabelle orders:

order_id original_price discounted_price
1 100 100
2 200 180
3 150 150

Query mit NULLIF():

SELECT order_id, original_price, discounted_price
FROM orders
WHERE NULLIF(original_price, discounted_price) IS NOT NULL;

Ergebnis:

order_id original_price discounted_price
2 200 180

Nur Bestellungen mit Rabatt landen im Ergebnis.

Praktische Use-Cases für NULLIF()

Case 1: Auswahl eines optionalen Werts

Beim Arbeiten mit Daten willst du manchmal einen Wert aus mehreren Spalten auswählen, aber bestimmte Werte ausschließen. Zum Beispiel haben wir eine Liste von Mitarbeitenden mit ihren Gehältern: base_salary und bonus. Wenn der Bonus 0 ist, wollen wir ihn auf 999 setzen.

Tabelle employees:

employee_id base_salary bonus
1 50000 10000
2 40000 0
3 60000 5000

Query mit NULLIF():

SELECT employee_id,
       base_salary + COALESCE(NULLIF(bonus, 0), 999) AS total_salary
FROM employees;

Ergebnis:

employee_id total_salary
1 60000
2 40999
3 65000

Wenn bonus gleich 0 ist, wird er zu 999.

Case 2: Zeilen zählen

Wir können NULLIF() nutzen, um komplizierte Filterbedingungen zu vereinfachen. Zum Beispiel gibt es eine Tabelle mit Usern und wir wollen in einer Query sowohl die Gesamtzahl als auch die Zahl der registrierten User (ohne Status guest) herausfinden.

SELECT
  COUNT(*) AS total_users,
  COUNT(NULLIF(status, 'guest')) AS registered_users
FROM users;

So kannst du mit nur einer Funktion NULLIF() viele Aufgaben lösen: von Fehlervermeidung bis zu besserer Lesbarkeit deines Codes. Jetzt, wo du weißt, wie sie funktioniert, bist du schon einen Schritt näher am Daten-Profi in PostgreSQL.

2
Aufgabe
SQL SELF, Level 9, Lektion 4
Gesperrt
Vermeidung der Division durch Null mit `NULLIF()`
Vermeidung der Division durch Null mit `NULLIF()`
2
Aufgabe
SQL SELF, Level 9, Lektion 4
Gesperrt
Filtern von Bestellungen mit Rabatt mithilfe von `NULLIF()`
Filtern von Bestellungen mit Rabatt mithilfe von `NULLIF()`
1
Umfrage/Quiz
Umgang mit NULL, Level 9, Lektion 4
Nicht verfügbar
Umgang mit NULL
Umgang mit NULL
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION