Zurück zur Artikelliste Artikel
21 Leseminuten

18 SQL-Übungsfragen für Einsteiger: Theorie und praktische Übungen

Egal, ob Sie mit SQL beginnen oder Ihre Kenntnisse auffrischen möchten, arbeiten Sie mit uns diese 18 SQL-Übungsfragen für Anfänger durch.

SQL (Structured Query Language) ist eine Programmiersprache, die zum Definieren, Abrufen und Manipulieren von Daten in relationalen Datenbanken verwendet wird. Sie bietet eine intuitive Syntax von SQL-Anweisungen und Schlüsselwörtern zum Erstellen, Ändern und Abfragen relationaler Datenbanken.

Dieser Artikel konzentriert sich auf die Wiederholung und das Üben der Grundlagen von SQL. Zunächst werden die Anweisung SELECT und ihre erforderlichen und optionalen Komponenten zum Abrufen von Daten aus einer einzelnen Tabelle behandelt. Danach werden wir uns mit JOINs beschäftigen, mit dem wir Daten aus zwei oder mehr Tabellen zusammenführen können. Schließlich zeigen wir Ihnen, wie Sie Daten aggregieren und gruppieren können, um weitergehende Analysen durchzuführen. Dies kann Ihnen helfen, Ihre SQL-Kenntnisse vor einem Vorstellungsgespräch oder einer Prüfung zu überprüfen - oder einfach Ihre Kenntnisse aufzufrischen und zu festigen.

In diesem Artikel finden Sie SQL-Übungen aus unserem interaktiven SQL-Übungssatz Kurs. Der Kurs bietet über 80 praktische Übungen, die verschiedene SQL-Themen abdecken: Abfragen einzelner Tabellen, Joins, Aggregation und Gruppierung, Unterabfragen usw. Wenn Sie selbst weiter üben möchten, empfehlen wir Ihnen unseren SQL-Praxis Kurs.

Alle unsere SQL-Praxiskurse enthalten Übungen, die auf realen Datensätzen basieren, so dass Sie SQL in realistischen Szenarien üben können. Die Kurse sind in verschiedene Themenbereiche unterteilt - z. B. Abfragen für einzelne Tabellen, Joins, Aggregation und Gruppierung sowie Unterabfragen -, so dass Sie auswählen können, was Sie üben möchten.

Fangen wir an.

SQL-Praxis für Einsteiger

Die SQL-Übungen in diesem Artikel behandeln die Grundlagen der Datenabfrage. Wir besprechen:

  • Einzelne Tabellenabfragen - Abfragen von Daten aus einer einzelnen Tabelle mit der SELECT-Anweisung.
  • JOINs - Verbinden von Daten aus mehreren Tabellen mit Hilfe verschiedener JOINs.
  • Aggregieren und Gruppieren von Daten - Einordnen von Daten in Gruppen auf der Grundlage von definierten Spalten und Erstellen von Statistiken.

Abfragen für einzelne Tabellen

Wir beginnen mit den Grundlagen der Abfrage von Daten aus einer einzelnen Tabelle und dem Auferlegen von benutzerdefinierten Bedingungen für Datenspalten.

Frage 1: Elemente einer SQL-Abfrage

Frage:

Nennen Sie alle Elemente einer SQL-Abfrage.

Antwort: Ja:

Die Anweisung SELECT besteht aus den folgenden Komponenten:

  • SELECT column_name(s) - Definiert die Datenspalten, die in der Ausgabe angezeigt werden.
  • FROM table_name - Definiert die Datenbanktabelle, aus der die Daten ausgewählt werden.
  • WHERE column_name = value - Filtert die Ausgabedaten auf der Grundlage der angegebenen Bedingungen (optional).
  • GROUP BY column_name(s) - Wenn Sie Aggregatfunktionen verwenden, müssen Sie die GROUP BY Klausel verwenden.
  • HAVING - Filtert Daten, nachdem sie von GROUP BY verarbeitet wurden (optional); Sie können dies verwenden, um Bedingungen für Aggregatfunktionen festzulegen.
  • ORDER BY column_name [ASC | DESC] - Ordnet die Ausgabedaten nach einer definierten Spalte in aufsteigender oder absteigender Reihenfolge (optional).

Die beiden Klauseln SELECT und FROM sind leicht zu verstehen, da SELECT die Datenspalten auflistet und FROM die Datentabelle definiert. Im Fall der WHERE Klausel gibt es eine Reihe von Bedingungen, die Sie den Spalten auferlegen können und die wir in der nächsten Frage behandeln werden.

Weitere Informationen zu den grundlegenden Abfrageelementen finden Sie in unserem Artikel Aufzählung und Erläuterung aller grundlegenden Elemente einer SQL-Abfrage.

Mitbringsel:

Dies sind die Elemente einer SQL-Abfrage in der Reihenfolge ihres Auftretens: SELECT, FROM, WHERE, GROUP BY, ORDER BY, und HAVING.

Frage 2: Filtern von Daten in einer SQL-Abfrage

Frage:

Wie filtern Sie Daten in einer SQL-Abfrage mithilfe von benutzerdefinierten Bedingungen?

Antwort:

Um benutzerdefinierte Bedingungen für Datenspalten festzulegen, verwenden wir die WHERE Klausel. Wenn Sie zum Beispiel Personen auswählen möchten, die älter als 18 Jahre sind, verwenden Sie die WHERE Klausel wie folgt:

SELECT name, age
FROM person
WHERE age > 18;

Die Bedingungen der WHERE Klausel beinhalten in der Regel Vergleiche oder logische Operationen und hängen vom Datentyp ab, der in der Spalte gespeichert ist.

  • Vergleichsoperatoren, die zum Vergleichen von Werten verwendet werden:
    • Numerische Datentypen: =, <> or !=, >, <, >=, <=
    • Text/String-Datentypen: =, <> or !=, LIKE, IN, NOT LIKE, NOT IN
    • Datums- und Zeitdatentypen: =, <> or !=, >, <, >=, <=, BETWEEN, NOT BETWEEN
    • Boolesche Datentypen: =, <> or !=
  • Operatoren zur Prüfung auf NULL Werte: IS NULL, IS NOT NULL
  • Logische Operatoren, die zur Kombination mehrerer Bedingungen verwendet werden: AND, OR, NOT

Weitere Informationen über das Filtern von Daten finden Sie in unseren Artikeln How to Write a WHERE Clause in SQL und AND-, OR- und NOT-Operatoren in SQL verwenden.

Mitbringsel:

Die WHERE Klausel wird verwendet, um Daten zu filtern, indem Bedingungen für Datenspalten festgelegt werden.

Daten für die Fragen 3 - 6

In den Übungen 3 - 6 verwenden wir die cat Tabelle. Sie hat die folgenden Spalten:

  • id - Die ID einer bestimmten Katze.
  • name - Den Namen der Katze.
  • breed - Die Rasse der Katze (z.B. Siam, Britisch-Kurzhaar, etc.).
  • coloration - Die Färbung der Katze (z.B. Kattun, Tabby, etc.).
  • age - Das Alter der Katze.
  • sex - Das Geschlecht der Katze.
  • fav_toy - Das Lieblingsspielzeug der Katze.

Frage 3: Wählen Sie Katzen eines bestimmten Alters und einer bestimmten Rasse

Frage:

Wählen Sie die ID und den Namen für jede Ragdoll-Katze aus, die entweder 1) jünger als fünf Jahre oder 2) älter als zehn Jahre alt ist.

Antwort:

SELECT
  id,
  name
FROM cat
WHERE (age < 5 OR age > 10)
  AND breed = 'Ragdoll';

Erläuterung:

Wie die Anweisung sagt, wählen wir die Spalten id und Name aus der cat Tabelle.

Als nächstes verwenden wir die WHERE Klausel, um Bedingungen aufzustellen:

  • Für die Spalte Alter:

Wir wollen Katzen auswählen, die jünger als 5 (age < 5) oder älter als 10 (age > 10) sind, also verwenden wir das Schlüsselwort OR und schließen beide Bedingungen in Klammern ein.

Warum brauchen wir Klammern? Nun, wir wollen diese zusammengesetzte Bedingung auf die Altersspalte anwenden. Was passiert, wenn wir keine Klammern einschließen? Die Klammern werden dann implizit auf die letzten beiden Bedingungen angewendet, etwa so: age < 5 OR (age > 10 AND breed = 'Ragdoll'). Dies führt zu einem falschen Ergebnis.

  • In der Spalte "Rasse":

Wir wollen Katzen der Rasse Ragdoll auswählen; daher definieren wir die Bedingung einfach als breed = 'Ragdoll'. Beachten Sie, dass Textwerte in SQL in einfache Anführungszeichen (') gesetzt werden.

Diese Übung demonstriert eine zusammengesetzte Bedingung, die logische Operatoren (AND, OR) und mathematische Vergleichsoperatoren (<, >, =) verwendet.

Frage 4: Liste der Katzen, deren Lieblingsspielzeug ein Ball ist

Frage:

Wählen Sie alle Daten für Katzen aus, deren Rasse mit "R" beginnt, deren Lieblingsspielzeug mit "Ball" beginnt und deren Färbung mit einem "m" endet.

Antwort:

SELECT *
FROM cat
WHERE breed LIKE 'R%'
  AND fav_toy LIKE 'ball%'
  AND coloration LIKE '%m';

Erläuterung:

Hier werden alle Datenspalten (*) aus der Tabelle cat Tabelle.

Wir wollen Bedingungen für die literalen Werte der Spalten breed, colorations und fav_toy aufstellen. Dazu verwenden wir den Mustervergleich; in SQL ist % ein Platzhalterzeichen, das für eine beliebige Folge von Zeichen steht.

Der Wert der Spalte breed sollte mit einem "R" beginnen. Daher verwenden wir ein Muster, das einen Wert angibt, der mit "R" beginnt und von einer beliebigen Anzahl von Zeichen gefolgt wird (definiert durch %). Wenn wir eine solche Bedingung auf einen literalen Wert anwenden wollen, müssen wir das Schlüsselwort LIKE verwenden: breed LIKE 'R%'.

In ähnlicher Weise wollen wir, dass der Name des Lieblingsspielzeugs mit "Ball" beginnt; daher lautet die Bedingung fav_toy LIKE 'ball%'.

Das Gleiche gilt für die Spalte coloration. Der literalisierte Wert soll mit einem "m" enden, also wird das Zeichen % vorangestellt: coloration LIKE '%m'.

Weitere Informationen zur Verwendung des Operators LIKE finden Sie in unseren Artikeln Was bewirken die Operatoren LIKE und NOT LIKE? und Wie verwendet man LIKE in SQL?

Frage 5: Finden Sie die gelangweilteste Katze

Frage:

Wählen Sie die Namen aller Kater aus, die kein Lieblingsspielzeug haben - das heißt, der Wert des Feldes fav_toy ist NULL.

Antwort:

SELECT name
FROM cat
WHERE sex = 'M'
  AND fav_toy IS NULL;

Erläuterung:

Wie die Anweisung sagt, wählen wir die Namensspalte aus der cat Tabelle.

Wir wollen nur männliche Katzen auswählen; daher definieren wir eine Bedingung für die Spalte sex als sex = 'M'. Sie müssen mit den Daten in der Tabelle cat Tabelle gespeicherten Daten vertraut sein, d. h. Sie müssen wissen, dass die Spalte Geschlecht den Wert ‘F’ für weibliche Katzen und ‘M’ für männliche Katzen enthält.

Da wir nach der am meisten gelangweilten Katze suchen, müssen wir eine Bedingung definieren, die besagt, dass die Spalte fav_toy keinen Wert haben oder NULL sein muss. Wir tun dies mit fav_toy IS NULL.

Die Arbeit mit NULLs ist in SQL ziemlich kompliziert. Für weitere Details empfehlen wir die Artikel:

Frage 6: Auswählen von Katzen, die Reizspielzeug lieben

Frage:

Wählen Sie die ID, den Namen, die Rasse und die Färbung aller Katzen aus, die:

  • Weibchen sind.
  • Spielzeuge mögen,
  • nicht zu den Rassen Perser oder Siam gehören.

Antwort:

SELECT 
  id,
  name,
  breed,
  coloration
FROM cat
WHERE sex = 'F'
  AND fav_toy = 'teaser'
  AND (breed NOT LIKE 'Persian' AND breed NOT LIKE 'Siamese');

Erläuterung:

In dieser Übung wählen wir die Spalten id, name, breed und coloration aus der cat Tabelle. Dann stellen wir die folgenden Bedingungen auf:

  • Für die Spalte sex:
    Wir wollen weibliche Katzen auswählen; daher lautet die Bedingung sex = 'F'.
  • In der Spalte fav_toy:
    Wir wollen Katzen finden, die Reizspielzeug mögen, daher lautet die Bedingung fav_toy = 'teaser'.
  • In der Spalte "Rasse":
    Wir möchten alle Rassen außer Perser und Siam auswählen. Dazu verwenden wir das Schlüsselwort NOT LIKE und schließen die gesamte zusammengesetzte Bedingung in Klammern ein (breed NOT LIKE 'Persian' AND breed NOT LIKE 'Siamese').

Gute Arbeit! Damit haben Sie den Abschnitt über die Auswahl von Daten aus einer einzigen Tabelle mit verschiedenen Filterbedingungen abgeschlossen. Gehen wir nun zur Arbeit mit mehreren Tabellen über.

Daten aus mehreren Tabellen: SQL-JOINs

Jetzt wissen Sie, wie man Daten aus einer einzelnen Tabelle auswählt. Was aber, wenn wir Daten aus zwei oder mehr Tabellen auswählen wollen? Dann müssen wir diese Tabellen auf der Grundlage gemeinsamer Spaltenwerte verbinden. Hier kommen die JOIN Operationen ins Spiel.

Frage 7: Die Rolle von JOIN

Frage:

Was macht JOIN in SQL?

Antwort::

Die JOIN Klausel wird verwendet, um Daten aus zwei oder mehr Tabellen zu kombinieren.

Sie können so viele JOINs verwenden, wie Sie benötigen. Im Folgenden verwenden wir zwei JOINs, um Daten aus drei Tabellen zu kombinieren:

SELECT t1.column, t2.column, t3.column
FROM table1 AS t1
JOIN table2 AS t2 ON t1.column = t2.column
JOIN table3 AS t3 ON t1.column = t3.column
...

Bei der Verknüpfung von Tabellen ist es am besten, für jede Tabelle einen Aliasnamen zu verwenden (hier t1, t2, und t3). Diese Aliasnamen werden verwendet, um auf Spalten aus jeder Tabelle zu verweisen.

Weitere Informationen über SQL-JOINs finden Sie in unseren Artikeln SQL INNER JOIN in einfachen Worten erklärt und Wie man zwei Tabellen in SQL verbindet.

Mitnehmen:

JOINs JOINs werden verwendet, um Daten aus mehreren Tabellen zu kombinieren.

Frage 8: Arten von JOINs

Frage:

Nennen Sie alle Arten von JOINs, die in SQL verfügbar sind, und beschreiben Sie kurz jede davon.

Antwort:

Es gibt vier Arten von JOINs: [INNER] JOIN, RIGHT JOIN, LEFT JOIN, und FULL [OUTER] JOIN. Jeder dieser Typen liefert unterschiedliche Ergebnisse.

Eine JOIN, auch bekannt als INNER JOIN, ist die häufigste Art der Verknüpfung. Er gibt nur die übereinstimmenden Datensätze aus zwei oder mehr Tabellen zurück.

sql practice questions

Eine LEFT JOIN gibt alle Datensätze aus der linken (ersten) Tabelle und die passenden Datensätze aus der rechten (zweiten) Tabelle zurück. Wenn es keine Übereinstimmungen in der rechten Tabelle gibt, werden die Werte von null in die Ergebnismenge aufgenommen.

sql practice questions

Lesen Sie Was ist ein LEFT JOIN in SQL? für weitere Details.

Ein RIGHT JOIN gibt alle Datensätze aus der rechten (zweiten) Tabelle und die passenden Datensätze aus der linken (ersten) Tabelle zurück. Wenn es keine Übereinstimmungen in der linken Tabelle gibt, werden die Werte von null in die Ergebnismenge aufgenommen.

sql practice questions

Eine FULL JOIN, auch FULL OUTER JOIN genannt, gibt alle Datensätze sowohl aus der linken als auch aus der rechten Tabelle zurück. Sie enthält übereinstimmende Datensätze aus beiden Tabellen und verwendet null Werte für nicht übereinstimmende Datensätze.

sql practice questions

Lesen Sie diesen Artikel, um mehr über FULL JOINs zu erfahren.

Zusammenfassend lässt sich sagen, dass LEFT JOIN und RIGHT JOIN sich auf eine Tabelle als primäre Datenquelle konzentrieren, während eine FULL JOIN alle Datensätze aus beiden Tabellen kombiniert. Die Entscheidung, welche JOIN zu verwenden ist, hängt von den spezifischen Datenabfrageanforderungen und der Beziehung zwischen den beteiligten Tabellen ab.

Um mehr über die verschiedenen JOIN-Typen zu erfahren, empfehlen wir unsere Artikel SQL-JOINs und SQL JOIN-Typen erklärt. Unser SQL JOIN Cheat Sheet fasst die Syntax der verschiedenen JOIN-Typen zusammen.

Mitbringsel:

Zu den JOIN-Typen gehören [INNER] JOIN, LEFT JOIN, RIGHT JOIN und FULL [OUTER] JOIN.

Daten für die Fragen 9 - 12

In den Übungen 9 - 12 verwenden wir den Museum Datensatz, der aus drei Tabellen besteht.

Die Tabelle artists Tabelle enthält die folgenden Spalten:

  • id - Die Datenbank-ID für einen bestimmten Künstler.
  • name - Den Namen des Künstlers.
  • birth_year - Das Jahr, in dem der Künstler geboren wurde.
  • death_year - Das Jahr des Künstlers
  • artistic_field - Das Hauptgebiet des Künstlers (z. B. Aquarell, Skulptur, Ölgemälde).

Die Tabelle museum Tabelle enthält die folgenden Spalten:

  • id - Die ID eines bestimmten Museums.
  • name - Den Namen des Museums.
  • country - Das Land, in dem sich das Museum befindet.

Die Tabelle piece_of_art Tabelle enthält die folgenden Spalten:

  • id - Die ID eines bestimmten Kunstwerkes.
  • name - Den Namen des Werks.
  • artist_id - Die ID des Künstlers, der dieses Werk geschaffen hat.
  • museum_id - Die ID des Museums, das dieses Kunstwerk in seiner Sammlung hat.

Frage 9: Finden Sie Künstler, die nach 1800 geboren wurden und die Kunst, die sie geschaffen haben

Frage:

Geben Sie für jeden Künstler, der nach dem Jahr 1800 geboren wurde und mehr als 50 Jahre gelebt hat, seinen Namen und die Namen der Kunstwerke an, die er geschaffen hat. Benennen Sie die Spalten jeweils in artist_name und piece_name um.

Die Antwort:

SELECT
  a.name AS artist_name,
  poa.name AS piece_name
FROM artist a
JOIN piece_of_art poa
  ON a.id = poa.artist_id
WHERE death_year - birth_year > 50
  AND birth_year > 1800;

Erläuterung:

Wir wählen Künstlernamen (alias artist_name) zusammen mit den von ihnen geschaffenen Kunstwerken (alias piece_name) aus. Daher müssen wir die Tabelle artist Tabelle (alias a) mit der piece_of_art (alias poa) über ihre gemeinsame Spalte verbinden, die die IDs der Künstler speichert (ON a.id = poa.artist_id).

Wir wollen nur Künstler berücksichtigen, die länger als 50 Jahre gelebt haben. Um diese Bedingung zu definieren, verwenden wir die Spalten birth_year und death_year aus der Tabelle artist wie folgt:

death_year - birth_year > 50

Außerdem wollen wir Künstler auflisten, die nach 1800 geboren wurden: birth_year > 1800.

Lesen Sie diesen Artikel über die Verknüpfung zweier Tabellen in SQL, um mehr zu erfahren.

Frage 10: Alle Kunstwerke und ihren Standort auswählen

Frage:

Wählen Sie die Namen aller Kunstwerke zusammen mit den Namen der Museen, die sie beherbergen, und den Ländern, in denen sich diese Museen befinden. Zeigen Sie auch verlorene Kunstwerke an (solche ohne zugehöriges Museum).

Antwort:

SELECT
  poa.name,
  m.name,
  m.country
FROM piece_of_art poa
LEFT JOIN museum m
  ON poa.museum_id = m.id;

Erläuterung:

Da wir die Namen der Kunstwerke sowie die Namen und Länder der Museen auswählen wollen, müssen wir die Tabelle piece_of_art Tabelle (alias poa) mit der museum Tabelle ( m) über die Spalte mit der Museums-ID (ON poa.museum_id = m.id) verknüpfen.

Es müssen alle Kunstwerke angezeigt werden, auch die, die verloren gegangen sind. Beachten Sie, dass den verlorenen Kunstwerken kein Museum zugewiesen ist. Daher benötigen wir einen speziellen Typ von JOIN, der alle Daten aus der Tabelle piece_of_art Tabelle auswählt, unabhängig davon, ob es übereinstimmende Datensätze in der museum Tabelle:

FROM piece_of_art poa LEFT JOIN museum m

Diese LEFT JOIN stellt sicher, dass wir alle Zeilen aus der linken Tabelle auswählen (hier, piece_of_art).

Lesen Sie diesen Artikel über LEFT JOIN, um mehr zu erfahren.

Frage 11: Alle Kunstwerke auflisten

Frage:

Geben Sie die Namen aller Kunstwerke zusammen mit den Namen ihrer Schöpfer und den Namen der Museen an, die diese Kunstwerke beherbergen. Lassen Sie verlorene Werke und Kunstwerke mit unbekanntem Künstler weg. Benennen Sie die Spalten Name des Kunstwerks, Name des Künstlers und Name des Museums.

Antwort:

SELECT
  a.name AS artist_name,
  m.name AS museum_name,
  poa.name AS piece_of_art_name
FROM museum m
JOIN piece_of_art poa
  ON m.id = poa.museum_id
JOIN artist a
  ON a.id = poa.artist_id;

Erläuterung:

Hier wählen wir Namen von Künstlern aus der artist Tabelle, Namen von Museen aus der museum Tabelle und Namen von Kunstwerken aus der piece_of_art Tabelle. Daher müssen wir alle drei Tabellen über ihre gemeinsamen Spalten verbinden:

  • Wir verbinden die museum Tabelle mit der piece_of_art Tabelle über die Museums-ID-Werte.
  • Wir verknüpfen die artist Tabelle mit der piece_of_art Tabelle mit den ID-Werten der Künstler.

Sobald wir alle drei Tabellen verbunden haben, können wir die Ausgabewerte auswählen.

Beachten Sie, dass wir Kunstwerke auslassen wollen, denen weder ein Museum noch ein Künstler zugeordnet ist. Daher verwenden wir den Standard JOIN (oder INNER JOIN), der Daten aus Tabellen nur dann verknüpft, wenn es eine Übereinstimmung in der Spalte gibt, für die JOIN ausgeführt wird.

Weitere Informationen finden Sie in diesem Artikel über die Verknüpfung von 3 oder mehr Tabellen.

Frage 12: Nennen Sie Kunstwerke, die von unbekannten Künstlern geschaffen wurden

Frage:

Prüfen Sie, ob Werke von unbekannten Künstlern geschaffen wurden. Zeigen Sie die Namen dieser Werke zusammen mit den Namen der Museen, die sie beherbergen.

Antwort:

SELECT
  poa.name,
  m.name
FROM piece_of_art poa
JOIN museum m
  ON poa.museum_id = m.id
WHERE poa.artist_id IS NULL;

Erläuterung:

Wir wollen die Namen der Werke "unbekannter Künstler" zusammen mit den Namen der Museen, in denen sich die Werke befinden, anzeigen. Daher verbinden wir die Tabelle piece_of_art Tabelle (alias poa) mit der museum (alias m) über die Spalte mit der Museums-ID (ON poa.museum_id = m.id).

Da wir nach Kunstwerken suchen, die von unbekannten Künstlern geschaffen wurden, fügen wir die folgende Bedingung in die WHERE Klausel ein: poa.artist_id IS NULL.

Gruppieren und Aggregieren von Daten

Aggregation und Gruppierung sind Techniken, die verwendet werden, um Daten anhand definierter Kriterien in Gruppen zu organisieren und Berechnungen mit den Gruppen durchzuführen.

Frage 13: Aggregatfunktionen und die Rolle von GROUP BY

Frage:

Listen Sie die verfügbaren Aggregatfunktionen auf und erklären Sie die Rolle der GROUP BY Klausel.

Antwort:

Bei der Aggregation werden mathematische Operationen auf eine Gruppe von Werten in einer Spalte angewendet. Zu den am häufigsten verwendeten Aggregatfunktionen gehören SUM(), AVG(), COUNT(), MAX() und MIN().

Stellen Sie sich zum Beispiel eine Tabelle vor, die monatliche Umsatzwerte speichert:

yearmonthsales
2022115
2022124
202313
202326
202336
202344
202355

Sie können die Aggregatfunktion SUM() verwenden, um die Gesamtverkäufe zu ermitteln, etwa so:

SELECT SUM(sales) AS total_sales
FROM sales_table;

Die Ausgabe sieht wie folgt aus:

total_sales
33

Beim Aggregieren von Daten werden die Daten oft auch in Gruppen unterteilt, die auf unterschiedlichen Werten in der Spalte basieren, die zum Gruppieren der Daten verwendet wird.

Beim Gruppieren werden Datengruppen auf der Grundlage von Werten in Spalten erstellt, die als Argumente für die GROUP BY -Klausel angegeben werden.

Stellen Sie sich zum Beispiel vor, Sie möchten den Umsatz pro Jahr auswählen. Dazu müssen Sie die Daten nach dem Jahr gruppieren, etwa so:

SELECT year, SUM(sales) AS year_sales
FROM sales_table
GROUP BY year;

Die Ausgabe ist wie folgt:

yearyear_sales
20229
202324

Wenn die Spalte, in der wir die Daten gruppieren, fünf unterschiedliche Werte hat, werden die Daten in fünf Gruppen gruppiert.

Wir empfehlen diesen Artikel, wenn Sie mehr über die GROUP BY Klausel erfahren möchten.

Mitbringsel:

Bei der Aggregation geht es um die Durchführung von Berechnungen mit einer Reihe von Werten, und bei der Gruppierung geht es um die Einteilung von Daten in Gruppen auf der Grundlage bestimmter Kriterien.

Frage 14: WHERE vs. HAVING

Frage:

Was ist der Unterschied zwischen WHERE und HAVING?

Antwort:

Sowohl WHERE als auch HAVING werden verwendet, um Daten zu filtern, indem bestimmte Bedingungen gestellt werden.

Der Unterschied besteht darin, dass WHERE verwendet wird, um Bedingungen an Datenspalten zu stellen (wie Sie im Abschnitt Abfragen für einzelne Tabellen gesehen haben), und dass HAVING verwendet wird, um Bedingungen an Aggregatfunktionen zu stellen (wie Sie in diesem Abschnitt sehen werden).

Lesen Sie diesen Artikel über WHERE vs. HAVING, um mehr über die Unterschiede zwischen diesen beiden Klauseln zu erfahren.

Mitbringsel:

WHERE Erzwingt Bedingungen für Spalten. HAVING erzwingt Bedingungen für Aggregatfunktionen.

Daten für die Fragen 15 - 18

In den Übungen 15 - 18 verwenden wir die games Tabelle. Sie besteht aus den folgenden Spalten:

  • id - Die ID eines bestimmten Spiels.
  • title - Der Name des Spiels (z. B. "Super Mario Bros").
  • company - Der Name der Firma, die dieses Spiel herstellt (z. B. "Nintendo").
  • type - Die Art des Spiels (z. B. "Arcade").
  • production_year - Das Jahr, in dem das Spiel entwickelt wurde.
  • system - Das System, für das ein Spiel veröffentlicht wurde (z. B. "NES").
  • production_cost - Die Kosten für die Produktion des Spiels.
  • revenue - Die mit dem Spiel erzielten Einnahmen.
  • rating - Die Bewertung, die dem Spiel gegeben wurde.

Frage 15: Berechnen Sie die durchschnittlichen Produktionskosten von guten Spielen

Frage:

Zeigen Sie die durchschnittlichen Produktionskosten von Spielen, die zwischen 2010 und 2015 produziert wurden und eine höhere Bewertung als 7 erhielten.

Antwort:

SELECT 
  AVG(production_cost)
FROM games
WHERE production_year BETWEEN 2010 AND 2015
  AND rating > 7;

Erläuterung:

Um die durchschnittlichen Produktionskosten von Spielen zu ermitteln, verwenden wir die Aggregatfunktion AVG() in der Spalte production_cost. Diese Funktion nimmt alle Werte aus der Spalte production_cost und berechnet den Durchschnitt.

Da wir an Spielen interessiert sind, die zwischen 2010 und 2015 produziert wurden, müssen wir diese Bedingung in die WHERE -Klausel aufnehmen: production_year BETWEEN 2010 AND 2015. Das klingt wie einfaches Englisch!

Außerdem wollen wir nur Spiele mit einer Bewertung von mehr als 7 einbeziehen, also fügen wir eine weitere Bedingung in die WHERE Klausel ein: AND rating > 7.

In diesem Artikel über die Funktion AVG() finden Sie weitere Beispiele.

Frage 16: Liefern Sie Statistiken zur Spieleproduktion nach Jahr

Frage:

Für jedes Jahr:

  • Zeigen Sie das Jahr an (production_year).
  • Zählen Sie die Anzahl der Spiele, die in diesem Jahr veröffentlicht wurden (nennen Sie diese Anzahl).
  • Geben Sie die durchschnittlichen Produktionskosten (als avg_cost) für diese Spiele an.
  • Zeigen Sie den durchschnittlichen Umsatz (als avg_revenue) dieser Spiele.

Antwort:

SELECT
  production_year,
  COUNT(*) AS count,
  AVG(production_cost) AS avg_cost,
  AVG(revenue) AS avg_revenue
FROM games
GROUP BY production_year;

Erläuterung:

Wir wollen verschiedene Statistiken pro Jahr anzeigen; deshalb brauchen wir GROUP BY production_year.

Da wir aus der Tabelle games Tabelle auswählen, verwenden wir die Funktion COUNT() aggregate, um die pro Jahr veröffentlichten Spiele zu zählen. Wir verwenden * als Argument, weil wir alle Zeilen zählen wollen (nicht die Werte einer bestimmten Spalte). Wir verwenden den Alias AS count.

Als nächstes wollen wir die durchschnittlichen Produktionskosten anzeigen: AVG(production_cost). Wir verwenden den Alias AS avg_cost.

Schließlich zeigen wir die durchschnittlichen Einnahmen an: AVG(revenue). Wir alias es AS avg_revenue.

Frage 17: Berechnen Sie den Bruttogewinn pro Unternehmen

Frage:

Geben Sie für alle Unternehmen in der games Tabelle enthalten sind, geben Sie ihren Namen und ihren Bruttogewinn über alle Jahre an. Um das Problem zu vereinfachen, nehmen wir an, dass der Bruttogewinn gleich dem Umsatz abzüglich der Produktionskosten aller Spiele ist; nennen Sie diese Spalte brutto_gewinn_summe. Ordnen Sie die Ergebnisse so, dass das Unternehmen mit dem höchsten Bruttogewinn an erster Stelle steht.

Antwort:

SELECT
  company,
  SUM(revenue - production_cost) AS gross_profit_sum
FROM games
GROUP BY 1
ORDER BY 2 DESC;

Erläuterung:

Wir wählen die Spalte company aus der games Tabelle. Für jede Firma summieren wir die Werte des Bruttogewinns (revenue - production_cost), die von jedem Spiel, das von dieser Firma erstellt wurde, produziert wurden.

Da wir die Summe des Bruttogewinns pro Firma sehen wollen, müssen wir GROUP BY company. In diesem Fall verwenden wir jedoch eine andere Syntax: GROUP BY 1, was bedeutet, dass wir GROUP BY die1. Spalte in SELECT auflisten wollen.

Schließlich ordnen wir die Ausgabe in absteigender Reihenfolge nach den Bruttogewinnwerten pro Unternehmen.

Frage 18: Identifizieren Sie gute Spiele

Frage:

Wir sind an guten Spielen interessiert, die zwischen 2000 und 2009 produziert wurden. Ein gutes Spiel hat eine Bewertung von mehr als 6 und war profitabel. Zeigen Sie für jedes Unternehmen:

  • Den Namen des Unternehmens.
  • Die Gesamteinnahmen aus guten Spielen, die zwischen 2000 und 2009 produziert wurden (als Spalte revenue_sum ).
  • Die Anzahl der guten Spiele, die das Unternehmen in diesem Zeitraum produziert hat (als Spalte number_of_games ).

Wichtig! Es werden nur Unternehmen mit einem Umsatz von mehr als 4.000.000 Spielen angezeigt.

Antwort:

SELECT
  company,
  COUNT(company) AS number_of_games,
  SUM(revenue) AS revenue_sum
FROM games
WHERE production_year BETWEEN 2000 AND 2009
  AND rating > 6
  AND revenue - production_cost > 0
GROUP BY company
HAVING SUM(revenue) > 4000000;

Erläuterung:

Diese Frage ist etwas schwieriger, da wir eine Abfrage erstellen müssen, die WHERE, HAVING, Aggregatfunktionen und Gruppierung verwendet.

Analysieren wir die Anweisungen Schritt für Schritt und übersetzen sie in SQL-Code.

WHERE-bezogene Anweisungen:

  • Spiele, die zwischen 2000 und 2009 produziert wurden, führen dazu, dass diese Bedingung zur WHERE Klausel hinzugefügt wird:
    WHERE production_year BETWEEN 2000 AND 2009
  • Spiele mit einer Bewertung von mehr als 6 führen dazu, dass diese Bedingung zur WHERE Klausel hinzugefügt wird:
    AND rating > 6
  • Spiele, die gewinnbringend waren , führen dazu, dass diese Bedingung in die WHERE Klausel aufgenommen wird:
    AND revenue - production_cost > 0
    Denken Sie daran, dass ein profitables Spiel bedeutet, dass die Einnahmen höher sind als die Produktionskosten.

SELECT-bezogene Anweisungen:

  • show company name führt dazu, dass diese Spalte der Anweisung SELECT hinzugefügt wird:
    SELECT company
  • show its total revenue (as revenue_sum) führt dazu, dass diese Spalte der Anweisung SELECT hinzugefügt wird:
    SUM(revenue) AS revenue_sum
  • zeige die Anzahl der guten Spiele (number_of_games) führt dazu, dass diese Spalte der Anweisung SELECT hinzugefügt wird:
    COUNT(company) AS number_of_games

GROUP BY- and HAVING-bezogene Anweisungen:

  • für jedes Unternehmen bedeutet, dass wir die Statistiken (COUNT() und SUM()) für ein Unternehmen berechnen. Wir müssen also die Daten nach Unternehmen gruppieren:
    GROUP BY company
  • Unternehmen mit einem Good-Game-Umsatz von über 4.000.000 anzuzeigen, führt dazu, dass diese Bedingung der HAVING -Klausel hinzugefügt wird:
    HAVING SUM(revenue) > 4000000

Auf diese Weise haben wir die Anweisungen zerlegt und in SQL-Code übersetzt.

Mehr Grundlagen SQL-Praxis

In diesem Artikel wurden die Grundlagen von SQL-Abfragen behandelt, darunter das Filtern von Daten, das Verbinden mehrerer Tabellen, das Ordnen und Sortieren von Ausgaben sowie das Aggregieren und Gruppieren von Daten.

Haben Ihnen die SQL-Übungen bis jetzt gefallen? Alle diese Übungen stammen aus unserem SQL-Übungssatz Kurs. Weitere SQL-Übungen finden Sie in den folgenden LearnSQL.de Übungskursen:

Sie können jeden dieser Kurse einzeln kaufen, oder Sie können unser Alle für immer SQL-Paket erwerben. Es umfasst alle über 70 SQL-Kurse, die auf unserer Plattform angeboten werden, einschließlich dieser Übungskurse und aller neuen Kurse, die wir in Zukunft hinzufügen werden.

Und denken Sie daran: Übung macht den Meister. Viel Glück auf Ihrer SQL-Reise!