Zurück zur Artikelliste Artikel
8 Leseminuten

10 NULL-Übungen für Einsteiger

Möchten Sie die Handhabung von NULL-Werten in Ihren Abfragen üben? Sehen Sie sich diese 10 neuen NULL-Übungen an!

Die Beherrschung von SQL erfordert eine Menge Übung. Während das Erlernen der Theorie wichtig ist, ist die praktische Übung eine der besten Möglichkeiten, um Ihre SQL-Kenntnisse auf dem neuesten Stand zu halten. In diesem Artikel stellen wir Ihnen 10 NULL-Übungen vor, die Sie analysieren können, komplett mit Lösungen und Erläuterungen.

Der Umgang mit NULLs kann SQL-Anfänger überraschen. NULL verhält sich nicht wie normale Daten, sondern stellt das völlige Fehlen von Informationen dar, was anfangs schwer zu verstehen sein kann.

Die folgenden SQL-Übungen werden Ihnen helfen, Ihre Kenntnisse zum Thema NULL zu vertiefen. Wir werden alle Feinheiten der Arbeit mit NULLs abdecken und eine breite Palette von Anwendungsfällen mit fehlenden Daten üben.

Und wenn Sie danach noch mehr üben möchten - nicht nur mit NULLs, sondern mit der Gesamtheit von SQL - versuchen Sie unseren SQL-Praxis Track. Er enthält mehr als 1250 Übungsaufgaben, die Ihnen helfen, SQL zu beherrschen. Und da alles in Ihrem Browser stattfindet, müssen Sie nichts einrichten oder herunterladen.

Sind Sie bereit für einige SQL NULL-Übungen? Lassen Sie uns gleich eintauchen!

Lernen Sie die Daten kennen

Für dieses Übungsset werden wir zwei Tabellen verwenden: employee und department. Werfen Sie einen Blick auf einige Beispieldaten aus jeder Tabelle:

employee

idnamesalarybonuspositiondepartment_idmanager_id
1John Doe55001250CEO1NULL
2Jane Doe47501100CTO1NULL
3Mike Johnson2900NULLHead Accountant2NULL
4Sarah Brown23500Accountant23
5James Clark2500NULLHead of Marketing3NULL
6Emily Davis3100NULLSoftware Developer42

In der Tabelle der Mitarbeiter können einige Spalten fehlende (NULL-)Werte aufweisen. Zum Beispiel ist manager_id NULL für alle Mitarbeiter, die keinen anderen Mitarbeiter haben, der sie beaufsichtigt (d.h. der Manager selbst). Und die Informationen salary und bonus können fehlen, wenn sie nicht auf den betreffenden Mitarbeiter zutreffen.

department

idnameregion
1Executive TeamCentral Hub
2AccountingNorthwest
3SalesWest Coast
4DevelopmentNULL

In der department Tabelle kann nur die Region NULL angegeben werden. Dies zeigt an, dass die Abteilung online arbeitet. Wir werden in den Übungen darauf zurückkommen.

SQL-NULL-Übungen

1. Teamleiter

Übung: Zeigen Sie Informationen über alle Teamleiter an (d.h. Mitarbeiter, die keine manager_id haben).

Lösung:

SELECT *
FROM employee
WHERE manager_id IS NULL;

Erläuterung: Um nach den Mitarbeitern zu filtern, die kein manager_id haben, müssen wir den IS NULL Operator verwenden. Die Verwendung von regulären Operatoren wie = oder != mit NULLen funktioniert in SQL nicht wie erwartet. Wenn Sie diese Operatoren verwenden, wird das Ergebnis immer NULL sein und die Bedingung WHERE wird fehlschlagen.

Wenn wir alle nicht-teamführenden Mitarbeiter anzeigen wollten, wäre die Filterbedingung WHERE manager_id IS NOT NULL. Mehr darüber, was NULLs sind und wie sie funktionieren, erfahren Sie unter NULLs und Umgang mit fehlenden Daten in SQL.

2. Etablierte Abteilungen

Übung: Zeigen Sie alle physischen Abteilungen an (d.h. diejenigen, die einen Regionswert haben). Abteilungen ohne Region arbeiten online.

Lösung:

SELECT *
FROM department
WHERE region IS NOT NULL;

Erläuterung: Verwenden Sie dasselbe Prinzip für die Filterung, das wir in der vorherigen Übung besprochen haben. In diesem Fall müssen Sie den Operator IS NOT NULL verwenden.

3. Fehlende Boni

Übung: Zeigen Sie die Anzahl der Mitarbeiter an, die einen fehlenden Bonus haben.

Lösung:

SELECT COUNT(*)
FROM employee
WHERE bonus IS NULL;

Erläuterung: Filtern Sie mit dem Operator IS NULL nach den Mitarbeitern ohne Bonus. Verwenden Sie die Aggregatfunktion COUNT(), um die Anzahl der Mitarbeiter ohne Bonus zu zählen.

Hinweis: Stellen Sie sicher, dass Sie das richtige Argument für die Funktion COUNT() verwenden, da COUNT(bonus) WHERE bonus IS NULL immer 0 zurückgibt.

4. Kleine Boni

Übung: Zeigen Sie alle Mitarbeiter an, die einen Bonus von weniger als 300 erhalten haben, einschließlich der Mitarbeiter, für die kein Bonus aufgezeichnet wurde. Zeigen Sie zuerst die Mitarbeiter an, für die kein Bonus aufgezeichnet wurde, und ordnen Sie dann die Mitarbeiter vom kleinsten zum größten Bonus.

Lösung:

SELECT *
FROM employee
WHERE bonus < 300
  OR bonus IS NULL
ORDER BY bonus NULLS FIRST;

Erläuterung: Hier ist die Bedingung in zwei Teile unterteilt:

  1. Boni kleiner als 300, und
  2. Fehlende Boni.

Für den ersten Teil können wir den < (kleiner als)-Operator verwenden, aber für den zweiten Teil brauchen wir den IS NULL -Operator.

Denken Sie daran, dass NULL nicht "größer" oder "kleiner" als 300 ist, daher müssen Sie IS NULL verwenden. Verbinden Sie die beiden Bedingungen mit dem Operator OR.

Um die Zeilen nach Bonus zu sortieren, verwenden Sie eine ORDER BY Klausel. Standardmäßig werden die Zeilen in aufsteigender Reihenfolge sortiert (d.h. kleinste bis größte Prämie). Um explizit anzugeben, dass die NULL-Zeilen im Ergebnis an erster Stelle stehen sollen, verwenden Sie die Klausel NULLS FIRST.

5. Online-Mitarbeiter

Übung: Finden Sie alle Mitarbeiter, die in entfernten Abteilungen arbeiten (d.h. diejenigen, bei denen Region NULL ist). Zeigen Sie den Namen des Mitarbeiters und den Namen der Abteilung an.

Lösung:

SELECT 
  employee.name AS employee,
  department.name AS department
FROM employee
JOIN department
  ON employee.department_id = department.id
WHERE department.region IS NULL;

Erläuterung: Verbinden Sie die employee und department zusammen, um sowohl auf den Namen des Mitarbeiters als auch auf den Namen der Abteilung name zugreifen zu können. Benennen Sie die Spalten mit dem Schlüsselwort AS um, um doppelte Namen zu vermeiden. Filtern Sie dann das Ergebnis nach der Abteilung region und behalten Sie nur die Zeilen, in denen die Region IS NULL vorkommt.

6. Mitarbeiter und Regionen

Übung: Zeigen Sie für jeden Mitarbeiter seinen Namen, den Namen der ihm zugewiesenen Abteilung und die Region an, in der seine Abteilung ansässig ist. Für Mitarbeiter in Abteilungen, in denen eine Region fehlt, geben Sie ‘Online’ als Region an.

Lösung:

SELECT 
  employee.name AS employee,
  department.name AS department,
  COALESCE(region, ‘Online’) AS region
FROM employee
JOIN department
  ON employee.department_id = department.id;

Erläuterung: Um sowohl den Namen des Mitarbeiters als auch den Namen und die Region der Abteilung anzuzeigen, verbinden Sie die Tabellen.

Mitarbeiter in Abteilungen ohne Region haben als Wert dieser Spalte NULL. Um diesen Wert zu ersetzen, können Sie die Funktion COALESCE() verwenden: Sie behält die Werte bei, die nicht null sind, ersetzt aber die NULLim Ergebnis durch einen neuen Wert, den wir angeben (‘Online’). Wenn Sie mehr über die Funktionsweise dieser Funktion erfahren möchten, lesen Sie unseren Artikel über die Funktion COALESCE().

7. Regionale Kopfzahl

Übung: Zeigen Sie jede Region in der Datenbank zusammen mit der Anzahl der Mitarbeiter an, die in dieser Region arbeiten. Zeigen Sie ‘Online’ als Region für Mitarbeiter an, die keine Region haben.

Lösung:

SELECT 
  COALESCE(region, ‘Online’) AS region,
  COUNT(*)
FROM employee
JOIN department
  ON employee.department_id = department.id
GROUP BY region;

Erläuterung: Verbinden Sie die employee und department Tabellen. Verwenden Sie wie in der letzten Übung die Funktion COALESCE(), um fehlende Regionen durch "Online" zu ersetzen.

Fügen Sie die Aggregatfunktion COUNT() hinzu, um die Anzahl der Mitarbeiter in jeder Region zu ermitteln, und gruppieren Sie das Ergebnis nach der Spalte Region.

Hinweis: Es ist nicht notwendig, COALESCE() in der GROUP BY -Klausel zu verwenden. COALESCE() ersetzt alle NULLdurch denselben Wert, so dass die Anzahl der Gruppen und die Zeilen in ihnen unverändert bleiben.

8. Verhältnis Bonus/Gehalt

Übung: Zeigen Sie für jeden Mitarbeiter dessen Namen und das Verhältnis zwischen Bonus und Gehalt an. Wenn der Bonus 0 ist, geben Sie stattdessen NULL an.

Lösung:

SELECT 
  name,
  NULLIF(bonus, 0) / salary AS ratio 
FROM employee;

Erläuterung: Bei der Berechnung des Verhältnisses zwischen Gehalt und Bonus ist zu beachten, dass der Bonus auch 0 sein kann und wir im Endergebnis nicht 0 anzeigen wollen. Um dies zu vermeiden, können wir die Funktion NULLIF() mit der Bonusspalte verwenden. Diese Funktion prüft, ob der Bonus 0 ist; wenn ja, ersetzt sie die 0 durch NULL. Alle arithmetischen Operationen, die NULL enthalten, führen dazu, dass NULL zurückgegeben wird. Wenn also die Prämie NULL ist, ist auch das Verhältnis NULL.

9. Kopfzahl der Abteilung

Übung: Zählen Sie für jede Abteilung die Anzahl der Mitarbeiter, die dort arbeiten. Berücksichtigen Sie alle Abteilungen, auch die, denen keine Mitarbeiter zugewiesen sind. Ignorieren Sie Mitarbeiter ohne Abteilung.

Lösung:

SELECT 
  department.name AS department,
  COUNT(employee.id) AS employees
FROM department
LEFT JOIN employee
  ON department.id = employee.department_id
GROUP BY 
  department.name, 
  department.id;

Erläutern Sie: Verbinden Sie die department und employee Tabellen. Um sicherzustellen, dass Abteilungen ohne Mitarbeiter im Ergebnis angezeigt werden, verwenden Sie LEFT JOIN und stellen die department Tabelle an die erste Stelle. Zählen Sie die IDs der Mitarbeiter, um zu vermeiden, dass NULL-Zeilen gezählt werden, und gruppieren Sie das Ergebnis nach dem Namen der Abteilung und id (falls zwei Abteilungen denselben Namen haben).

10. Rollen pro Abteilung

Übung: Zeigen Sie den Namen jeder Abteilung, die Region und die Anzahl der verschiedenen Rollen innerhalb der Abteilung an. Vergewissern Sie sich, dass es einen Abschnitt "nicht zugewiesen" für Mitarbeiter ohne zugewiesene Abteilung gibt.

Lösung:

SELECT
  COALESCE(department.name, ‘unassigned’) AS department,
  region,
  COUNT(DISTINCT position) AS different_positions
FROM department
FULL OUTER JOIN employee
  ON employee.department_id = department.id
GROUP BY
  department.region, 
  department.name, 
  department.id

Erklären Sie: Verbinden Sie die department und employee mit Hilfe von FULL OUTER JOIN, um sicherzustellen, dass Abteilungen ohne Mitarbeiter und Mitarbeiter ohne Abteilungen angezeigt werden. Die Reihenfolge der Tabellen spielt dabei keine Rolle.

Um Mitarbeiter ohne Abteilung zu behandeln, verwenden Sie die Funktion COALESCE(), um den Abteilungsnamen durch ‘unassigned’ zu ersetzen. Zählen Sie die Anzahl der verschiedenen Positionen in jeder Abteilung mit COUNT(DISTINCT position). Mehr über die Verwendung des Schlüsselworts DISTINCT erfahren Sie in unserem Kochbuchartikel.

Gruppieren Sie das Ergebnis nach der Region, dem Namen und der ID der Abteilung. Beachten Sie, dass "unassigned" eine der resultierenden Gruppen ist.

Durstig nach mehr SQL NULL-Übungen?

Sehr gut gemacht! Sie haben einiges über den Umgang mit NULLs in SQL gelernt! Wenn Sie noch mehr praktische Übungen brauchen, schauen Sie sich unseren umfangreichen SQL-Praxis Track an. Neben NULLs deckt er alle Themen ab, die Ihnen helfen, Ihre SQL-Kenntnisse auf dem neuesten Stand zu halten.

Viel Spaß beim Üben!