Zurück zur Artikelliste Artikel
17 Leseminuten

15 SQL Server-Übungsaufgaben mit Lösungen

Verbessern Sie Ihre SQL Server-Kenntnisse mit unseren SQL Server-Übungen. Jede dieser 15 praktischen T-SQL-Aufgaben enthält eine detaillierte Lösung, damit Sie Ihre Abfragekenntnisse verbessern können.

Sie wissen ja, dass jeder sagt: "Übung macht den Meister"? Nun, für SQL könnte das nicht wahrer sein. Der eigentliche Lerneffekt tritt ein, wenn Sie anfangen, mit Abfragen, Tabellen und Daten zu arbeiten. Wenn Sie Ihre Fähigkeiten in MS SQL Server verbessern möchten, sind Sie hier genau richtig. Diese 15 einsteigerfreundlichen T-SQL-Übungen sind perfekt, um die Grundlagen zu erlernen. (Falls Sie sich wundern: T-SQL ist der SQL-Dialekt, der in SQL Server-Datenbanken verwendet wird.)

Die Übungen stammen aus unserem interaktiven Kurs SQL-Übungssatz in MS SQL Server. Dies ist ein T-SQL-Übungskurs für Anfänger, die mit SQL Server arbeiten. Er bietet über 80 praktische Übungen, gruppiert in Abschnitte zu Abfragen für einzelne Tabellen, Aggregatfunktionen, Gruppierung und Ordnung von Ergebnissen, JOINS und Unterabfragen und andere. Wenn Ihnen die Übungen in diesem Artikel gefallen, empfehle ich Ihnen, den Kurs auszuprobieren!

Wenn Sie ein Anfänger sind, der alles lernen möchte, was T-SQL zu bieten hat, sollten Sie sich unseren kompletten Lernkurs SQL von A bis Z in MS SQL Server ansehen. Der Kurs enthält 7 interaktive T-SQL-Kurse, die Ihnen das komplette moderne T-SQL für die Datenanalyse vermitteln.

Abschnitt 1: Katzen - Schnurrige SQL-Übungen, um Ihre Krallen zu schärfen

Im ersten Abschnitt arbeiten wir mit der Tabelle Cat. Diese Tabelle hat die folgenden Spalten:

  • Id - Die ID einer bestimmten Katze.
  • Name - Den Namen der Katze.
  • Breed - Die Rasse der Katze (z.B. Siam, Cornish Rex).
  • Coloration - Die Färbung der Katze (z. B. schildpatt, schwarz).
  • Age - Das Alter der Katze.
  • Sex - Das Geschlecht der Katze.
  • FavToy - Das Lieblingsspielzeug der Katze.

Übung 1: Lernen Sie die Katzentabelle kennen

Übung: Wählen Sie alle Daten aus der Cat Tabelle.

Lösung:

SELECT * 
FROM Cat;

Lösung: Wir verwenden die Anweisung SELECT, um Daten aus der Datenbank auszuwählen. Das Sternchen (*) nach SELECT bedeutet, dass Sie alle Spalten aus der Tabelle auswählen möchten. Der Befehl FROM Cat gibt die Tabelle an, aus der Sie die Zeilen abrufen.

Übung 2: Kätzchen

Übung: Wählen Sie die Name, Breed und Coloration für jede Katze, die jünger als fünf Jahre ist.

Lösung:

SELECT 
  Name, 
  Breed, 
  Coloration 
FROM Cat 
WHERE Age < 5;

Erläuterung: Wie zuvor verwenden wir die Anweisung SELECT. Diesmal listen wir die Spalten auf, die wir auswählen wollen: Name, Breed und Coloration. In der Klausel FROM geben wir den Namen der Tabelle (Cats).

In der Klausel WHERE geben wir die Bedingung an, nur Katzen auszuwählen, die jünger als 5 Jahre sind: Age < 5. Wir verwenden den Operator <, um den Wert der Spalte Alter mit der Zahl 5 zu vergleichen. Die Datenbank wählt nur die Katzen aus, die jünger als 5 sind (d. h. deren Alter kleiner als 5 ist).

Übung 3: Junge und alte Ragdoll-Katzen

Übung: Wählen Sie die ID und den Namen für jede Katze aus, die entweder jünger als fünf Jahre oder älter als zehn Jahre ist und der Rasse Ragdoll angehört.

Lösung:

SELECT Id, Name 
FROM Cat
WHERE (Age < 5 OR Age > 10)
AND Breed = 'Ragdoll';

Erläuterung: Diese Abfrage ähnelt der vorherigen Abfrage. Der einzige Unterschied besteht in der WHERE Klausel.

Wir suchen nach Katzen, die jünger als 5 oder älter als 10 Jahre sind. Zu diesem Zweck verwenden wir die Bedingung (Age < 5 OR Age > 10). Wir verwenden die Vergleichsoperatoren < und >, und kombinieren sie mit dem logischen Operator OR. Dadurch werden die Katzen ausgewählt, die entweder jünger als 5 oder älter als 10 sind.

Anschließend verwenden wir die Bedingung Breed = 'Ragdoll', um nur Ragdoll-Katzen auszuwählen. Es ist wichtig zu beachten, dass der Textwert Ragdoll in einfache Anführungszeichen gesetzt wird: 'Ragdoll'.

Schließlich verwenden wir den Operator AND, um die Bedingungen Alter und Rasse zu kombinieren.

Übung 4: Welche Katzen spielen gerne mit Bällen?

Übung: Wählen Sie alle Daten für Katzen aus, deren:

  • Rasse beginnt mit einem 'R'.
  • Färbung endet mit einem 'm'.
  • Das Lieblingsspielzeug beginnt mit dem Wort "Ball".

Lösung:

SELECT *
FROM Cat
WHERE Breed LIKE 'R%'
  AND Coloration LIKE '%m'
  AND FavToy LIKE 'ball%'

Erläuterung: Wir verwenden eine einfache SELECT Abfrage, um die Aufgabe zu lösen. In SELECT setzen wir das Sternchen * ein, um alle Spalten der Tabelle auszuwählen.

Dann verwenden wir AND, um drei WHERE Bedingungen zu kombinieren. Die erste Bedingung wählt Katzen aus, deren Rassenamen mit R beginnen. Wir verwenden den LIKE-Operator und den Platzhalter %: Breed LIKE 'R%'. Diese Bedingung bedeutet, dass wir nach Rassen suchen, die mit R beginnen, gefolgt von einem beliebigen Text (leer oder nicht).

In der zweiten Bedingung verwenden wir Coloration LIKE '%m', um Katzen zu finden, deren Färbung auf "m" endet. In der dritten Bedingung verwenden wir FavToy LIKE 'ball%', um nach Lieblingsspielzeug zu suchen, das mit "Ball" beginnt.

Wenn Sie auf der Suche nach weiteren grundlegenden SQL-Übungen sind, lesen Sie unseren Artikel 10 Anfänger-Übungen mit Lösungen SQL-Praxis .

Abschnitt 2: Spiele - Erweitern Sie Ihre SQL-Kenntnisse mit Videospiel-Daten

Jetzt wenden wir uns von Katzen ab und konzentrieren uns auf etwas ganz anderes: Videospiele. Wir arbeiten mit der Tabelle Games Tabelle, die aus 9 Spalten besteht:

  • Id - Die ID eines bestimmten Spiels.
  • Title - Der Titel des Spiels (z. B. Mario Kart).
  • Company - Die Firma, die das Spiel produziert hat.
  • Type - Das Genre (z.B. Rennspiel).
  • ProductionYear - Das Jahr, in dem das Spiel entwickelt wurde.
  • System - Das System, für das das Spiel veröffentlicht wurde (z. B. Nintendo).
  • ProductionCost - Die Kosten für die Produktion des Spiels.
  • Revenue - Die mit diesem Spiel erzielten Einnahmen.
  • Rating - Die Bewertung des Spiels (durch die Nutzer).

In diesem Abschnitt werden wir uns auf die Verwendung von GROUP BY und Aggregatfunktionen konzentrieren.

Übung 5: Durchschnittliche Produktionskosten für gute Spiele

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

Lösung:

SELECT 
  AVG(ProductionCost)
FROM Games
WHERE ProductionYear BETWEEN 2010 AND 2015
  AND Rating > 7;

Erläuterung: In der Anweisung SELECT verwenden wir die Aggregatfunktion AVG(), um die durchschnittlichen Produktionskosten zu berechnen. Wir geben ProductionCost als Argument an; der vollständige Ausdruck ist AVG(ProductionCost).

In der Klausel WHERE filtern wir nach Spielen mit hoher Bewertung (Rating > 7), die zwischen 2010 und 2015 produziert wurden (ProductionYear BETWEEN 2010 AND 2015).

Übung 6: Statistik der Spieleproduktion nach Jahr

Übung: Zeigen Sie für alle Spiele an, wie viele Spiele pro Jahr veröffentlicht wurden (als Anzahl column), die durchschnittlichen Produktionskosten (als Spalte AvgCost ) und die durchschnittlichen Einnahmen (als Spalte AvgRevenue ).

Lösung:

SELECT
  ProductionYear,
  COUNT(*) AS count,
  AVG(ProductionCost) AS AvgCost,
  AVG(Revenue) AS AvgRevenue
FROM Games
GROUP BY ProductionYear;

Erläuterung: Sie sind mit der grundlegenden SELECT Syntax vertraut, daher werden wir diese nicht weiter ausführen. In dieser Abfrage verwenden wir GROUP BY, um Zeilen auf der Grundlage eines bestimmten Wertes in Gruppen zu organisieren. Auf diese Weise können wir Statistiken für jede Gruppe finden.

In SELECT führen wir ProductionYear und die folgenden Ausdrücke auf:

  • COUNT(*) um die Zeilen in jeder Gruppe zu zählen.
  • AVG(ProductionCost) um die durchschnittlichen Produktionskosten in jeder Gruppe zu berechnen.
  • AVG(Revenue) um den durchschnittlichen Ertrag für jede Gruppe zu berechnen.

Nach FROM fügen wir GROUP BY hinzu. Da wir die Statistiken für jedes Produktionsjahr berechnen wollen, verwenden wir GROUP BY ProductionYear.

Übung 7: Produktionsstatistiken für Unternehmen

Übung: Wählen Sie für jedes Unternehmen den Namen, die Anzahl der produzierten Spiele (als Spalte NumberOfGames ) und die durchschnittlichen Produktionskosten (als Spalte AvgCost ). Hinweis: Zeigen Sie nur die Unternehmen an, die mehr als ein Spiel produziert haben.

Lösung:

SELECT Company,
  COUNT(*) AS NumberOfGames,
  AVG(ProductionCost) AS AvgCost
FROM Games
GROUP BY Company
HAVING COUNT(Company) > 1; 

Erläuterung: In dieser Abfrage wählen wir Daten aus der Tabelle Games Tabelle. Wir wählen Company, COUNT(*), um die Zeilen für diese Firma zu zählen, und AVG(ProductionCost), um die durchschnittlichen Produktionskosten für alle von dieser Firma produzierten Spiele zu berechnen.

Dann verwenden wir GROUP BY Unternehmen, um die von den einzelnen Unternehmen produzierten Spiele zu gruppieren. Schließlich verwenden wir die HAVING-Klausel, um die Ergebnisse auf Unternehmen zu beschränken, die mehr als ein Spiel produziert haben.

Übung 8: Gute Spiele identifizieren

Übung: Wir interessieren uns für gute Spiele, die zwischen 2000 und 2009 produziert wurden. Ein gutes Spiel ist ein Spiel, das eine Bewertung von mehr als 6 hat und profitabel war (mehr als seine Produktionskosten einbrachte).

Zeigen Sie für jedes Unternehmen den Firmennamen, die Gesamteinnahmen aus guten Spielen, die zwischen 2000 und 2009 produziert wurden (in der Spalte RevenueSum ), und die Anzahl der guten Spiele, die in diesem Zeitraum produziert wurden (in der Spalte NumberOfGames ). Zeigen Sie nur Unternehmen mit einem Umsatz mit guten Spielen von über 4 000 000.

Lösung:

SELECT
  Company,
  COUNT(*) AS NumberOfGames,
  SUM(Revenue) AS RevenueSum
FROM Games
WHERE ProductionYear BETWEEN 2000 AND 2009
  AND Rating > 6
  AND Revenue - ProductionCost > 0
GROUP BY Company
HAVING SUM(Revenue) > 4000000;

Erläuterung: In SELECT listen wir Company auf, um den Namen des Unternehmens zu erhalten, COUNT(*), um die Anzahl der von diesem Unternehmen produzierten Spiele zu zählen, und SUM(Revenue), um den Gesamtumsatz des Unternehmens zu berechnen.

In WHERE wenden wir die in der Übung erwähnten Filter auf Zeilenebene an:

  • ProductionYear BETWEEN 2000 AND 2009 um Spiele zu finden, die zwischen 2000 und 2009 produziert wurden.
  • Rating > 6 um Spiele mit einer Bewertung über 6 zu finden.
  • Revenue - ProductionCost > 0 um Spiele zu finden, deren Einnahmen die Produktionskosten übersteigen.

Wir gruppieren die Zeilen mit GROUP BY Company. Schließlich verwenden wir HAVING, um Unternehmen mit einem Gesamtumsatz über 4000000 zu finden.

Übung 9: Bruttogewinn nach Unternehmen

Übung: Geben Sie für alle in der Tabelle aufgeführten Unternehmen deren Namen und die Summe des Bruttogewinns über alle Jahre an. Um die Aufgabe zu vereinfachen, nehmen Sie an, dass der Bruttogewinn Revenue - ProductionCost ist; zeigen Sie diese Spalte als GrossProfitSum an.

Stellen Sie sicher, dass die Ergebnisse mit dem Unternehmen beginnen, das den höchsten Bruttogewinn erzielt hat.

Lösung:

SELECT
  Company,
  SUM(Revenue - ProductionCost) AS GrossProfitSum
FROM Games
GROUP BY Company
ORDER BY SUM(Revenue - ProductionCost) DESC;

Erläuterung: In der Anweisung SELECT werden die Werte Company und SUM(Revenue - ProductionCost) aufgeführt. Der Ausdruck Revenue - ProductionCost berechnet den Bruttogewinn für jedes Spiel und SUM(Revenue - ProductionCost) summiert diesen Gewinn über mehrere Spiele.

Anschließend gruppieren wir die Daten nach Unternehmen (GROUP BY Company) und ordnen die Ergebnisse nach dem gesamten Bruttogewinn in absteigender Reihenfolge. Schließlich ordnen wir nach dem Bruttogewinn, wobei wir die absteigende Reihenfolge angeben (10-1 statt 1-10), damit der höchste Gewinn zuerst kommt.

Weitere Übungen speziell für GROUP BY finden Sie in 10 GROUP BY SQL-Praxis Übungen mit Lösungen

Abschnitt 3: Die Kunst des JOIN

In diesem Abschnitt werden wir uns auf JOINs konzentrieren. Wir werden mit einer Datenbank arbeiten, die Daten über Kunstwerke enthält. In der Datenbank gibt es drei Tabellen.

Die Tabelle Artist hat die folgenden Spalten:

  • Id - Die ID eines bestimmten Künstlers.
  • Name - Den Namen des Künstlers.
  • BirthYear - Das Jahr, in dem der Künstler geboren wurde.
  • DeathYear - Das Sterbejahr des Künstlers.
  • ArtisticField - Das bevorzugte Fachgebiet des Künstlers (z. B. Malerei, Bildhauerei).

Die Tabelle PieceOfArt hat die folgenden Spalten:

  • Id - Die ID eines bestimmten Kunstwerkes.
  • Name - Der Name des Werks.
  • ArtistId - Die ID des Künstlers, der das Werk geschaffen hat.
  • MuseumId - Die ID des Museums, in dem das Werk ausgestellt ist.

Die Tabelle Museum besteht aus den folgenden drei Spalten:

  • Id - Die ID eines bestimmten Museums.
  • Name - Der Name des Museums.
  • Country - Das Land, in dem sich das Museum befindet.

Übung 10: Alle Kunstwerke auflisten

Aufgabe: Geben Sie die Namen aller Kunstwerke an, zusammen mit den Namen ihrer Schöpfer und den Namen der Museen, die die Kunstwerke beherbergen.

Lassen Sie verlorene Werke (d.h. solche ohne Museums-ID) und Werke mit unbekanntem Künstler unberücksichtigt. Benennen Sie die Spalten PieceOfArtName, ArtistName, und MuseumName.

Lösung:

SELECT
  A.Name AS ArtistName,
  M.Name AS MuseumName,
  Poa.Name AS PieceOfArtName
FROM Museum M
JOIN PieceOfArt Poa
  ON M.Id = Poa.MuseumId
JOIN Artist A
  ON A.Id = Poa.ArtistId;

Erläuterung: Wir wollen alle Kunstwerke auflisten, für die wir vollständige Informationen haben (Künstler, Museum). Das bedeutet, dass wir INNER JOIN verwenden müssen, um die Tabellen zu verbinden.

Wir verwenden das Schlüsselwort JOIN als Äquivalent zu INNER JOIN. Wir verknüpfen zunächst die Tabellen Museum und PieceOfArt über die Museums-ID. Dann verknüpfen wir die Artist Tabelle über die Künstler-ID.

Weitere Informationen zum Verbinden mehrerer Tabellen finden Sie in How to Join 3 Tables (or More) in SQL

Übung 11: Werke von Künstlern aus dem 19. Jahrhundert (und später)

Übung: Finden Sie Künstler, die mehr als 50 Jahre gelebt haben und nach dem Jahr 1800 geboren wurden. Zeigen Sie deren Namen und die Namen der Kunstwerke, die sie geschaffen haben. Benennen Sie diese Spalten in ArtistName bzw. PieceName um.

Lösung:

SELECT
  A.Name AS ArtistName,
  Poa.Name AS PieceName
FROM Artist A
JOIN PieceOfArt Poa
  ON A.Id = Poa.ArtistId
WHERE DeathYear - BirthYear > 50
  AND BirthYear > 1800;

Erläuterung: Hier verbinden wir die Tabellen Artist und PieceOfArt über die Künstler-ID. In der Klausel WHERE filtern wir nach Künstlern, die länger als 50 Jahre gelebt haben. Dazu berechnen wir das Alter des Künstlers mit einem Ausdruck DeathYear - BirthYear und filtern es mit dem Vergleich DeathYear - BirthYear > 50.

Wir filtern auch nach Künstlern aus dem 19. Jahrhundert oder später mit der Bedingung BirthYear > 1800. Wir kombinieren die beiden Bedingungen mit einem AND Operator.

Übung 12: Die Produktivität von Künstlern

Übung: Zeigen Sie die Namen der Künstler zusammen mit der Anzahl der Jahre, in denen sie gelebt haben (benennen Sie die Spalte YearsLived) und die Anzahl der Werke, die sie geschaffen haben (benennen Sie die Spalte NumberOfCreated).

Geben Sie nur Künstler an, die mindestens ein Kunstwerk geschaffen haben.

Lösung:

SELECT
  A.Name,
  DeathYear - BirthYear AS YearsLived,
  COUNT(Poa.ArtistId) AS NumberOfCreated
FROM Artist A
JOIN PieceOfArt Poa
  ON A.Id = Poa.ArtistId
GROUP BY A.Name, DeathYear - BirthYear;

Erläuterung: Diese SQL-Abfrage wählt den Namen des Künstlers, die Anzahl der Jahre, die er gelebt hat (DeathYear - BirthYear), und die Gesamtzahl der Werke, die er geschaffen hat COUNT(Poa.ArtistId).

Die Daten werden anhand der Künstler-ID zwischen der Tabelle Artist Tabelle und der PieceOfArt Tabelle. Die Ergebnisse werden nach dem Namen des Künstlers und seiner Lebensspanne gruppiert.

Zwei Dinge sind hier wichtig zu beachten. Erstens müssen wir den Ausdruck DeathYear - BirthYear in die Klausel GROUP BY aufnehmen, da dieser Ausdruck nicht gruppiert ist. Andernfalls könnte die Datenbank einen Fehler ausgeben. (Sie können über den Fehler in How to Fix a 'Not a GROUP BY Expression' Error and How to Solve the Error "must appear in the GROUP BY clause" lesen).

Zweitens: Da wir INNER JOIN verwenden, ist bereits garantiert, dass wir Künstler erhalten, die mindestens ein Kunstwerk geschaffen haben. Künstler, die keine Kunstwerke geschaffen haben, werden von dieser JOIN ausgeschlossen.

Weitere SQL JOIN-Übungen finden Sie in SQL Joins: 12 Übungsfragen mit detaillierten Antworten

Abschnitt 4: Eine Wagenladung mit Daten

In diesem letzten Abschnitt arbeiten wir mit Daten aus einer Ladendatenbank. Sie besteht aus fünf Tabellen:

Categories speichert die Namen der Produktkategorien:

  • Id - Die ID einer bestimmten Kategorie
  • Name - Der Name der Kategorie.

Products speichert Produktdaten:

  • Id - Die ID eines bestimmten Produkts.
  • Name - Der Name des Produkts.
  • CategoryId - Die ID der Kategorie, zu der das Produkt gehört.
  • Price - Der Preis des Produkts.

Clients speichert grundlegende Informationen über den Käufer:

  • Id - Die ID eines bestimmten Kunden.
  • FirstName - Den Vornamen des Kunden.
  • LastName - Der Nachname des Kunden.

Orders speichert grundlegende Informationen zur Bestellung:

  • Id - Die ID einer bestimmten Bestellung.
  • ClientId - Die ID des Kunden, der den Auftrag erteilt hat.
  • Year - Das Jahr, in dem der Auftrag erteilt wurde.

Schließlich enthält die Tabelle OrderItems Daten darüber, aus welchen Artikeln die einzelnen Bestellungen bestehen. Es handelt sich um eine assoziative Tabelle, die die Daten aus den Tabellen Orders und Products Tabellen verbindet. Sie besteht aus den folgenden Spalten:

  • OrderId - Die ID der Bestellung.
  • ProductId - Die ID des Produkts in der oben genannten Bestellung.
  • Quantity - Die Menge des Produkts in dieser Bestellung.
  • Price - Der Gesamtpreis für das Produkt in dieser Bestellung.

Übung 13: Einnahmen für jede Bestellung

Übung: Markieren Sie für jede Bestellung deren ID (benennen Sie die Spalte OrderId), den Vor- und Nachnamen des Kunden, der diese Bestellung aufgegeben hat, und den Gesamtumsatz, der durch diese Bestellung erzielt wurde (benennen Sie die Spalte Revenue).

Hinweis: Der Umsatz für die Bestellung ist die Summe der Spalte Price für jeden Artikel der Bestellung.

Lösung:

SELECT
  O.Id AS OrderId,
  C.FirstName,
  C.LastName,
  SUM(Oi.Price) AS Revenue
FROM Orders AS O
JOIN OrderItems AS Oi
  ON O.Id = Oi.OrderId
JOIN Clients AS C
  ON O.ClientId = C.Id
GROUP BY O.Id, C.FirstName, C.LastName;

Erläuterung: In dieser Abfrage verbinden wir die Tabellen Orders, OrderItems, und Clients.

In SELECT wählen wir vier Ausdrücke aus: die ID der Bestellung, den Vor- und Nachnamen des Kunden und die Summe der Preise aller Bestellpositionen. In GROUP BY gruppieren wir die Daten nach der Bestell-ID und dem Vor- und Nachnamen des Kunden. So erhalten wir den Gesamtumsatz für jede Bestellung mit Informationen (Vor- und Nachname) über den Kunden.

Übung 14: Wer hat Produkte wieder gekauft?

Übung: Wählen Sie den Vor- und Nachnamen der Kunden aus, die Produkte nachgekauft haben (d. h. das gleiche Produkt in mehr als einer Bestellung gekauft haben). Geben Sie die Namen dieser Produkte und die Anzahl der Bestellungen an, in denen sie enthalten waren (benennen Sie die Spalte OrderCount).

Lösung:

SELECT
  Cli.FirstName,
  Cli.LastName,
  P.Name,
  COUNT(O.Id) AS OrderCount
FROM Clients cli
JOIN Orders O
  ON Cli.Id = O.ClientId
JOIN OrderItems Oi
  ON O.Id = Oi.OrderId
JOIN Products P
  ON P.Id = Oi.ProductId
GROUP BY Cli.FirstName, Cli.LastName, P.Name
HAVING COUNT(O.Id) > 1

Erläuterung: Hier verbinden wir vier Tabellen: Clients, Orders, OrderItems, und Products.

In SELECT wählen wir den Vor- und Nachnamen des Kunden, den Namen des Produkts und die Anzahl der Bestellungen, in denen dieses Produkt von diesem Kunden gekauft wurde. Wir gruppieren die Tabelle nach Kundendaten (Vor- und Nachname) und nach dem Produktnamen. Auf diese Weise werden die Käufe dieses Kunden für dieses Produkt gruppiert.

In HAVING filtern wir nach Zeilen, in denen die Anzahl der Bestellungen größer als 1 ist. Auf diese Weise können wir Kunden auswählen, die dasselbe Produkt mehr als einmal gekauft haben.

Übung 15: Wie viel hat jeder Kunde pro Kategorie ausgegeben?

Übung: Wählen Sie den Vor- und Nachnamen jedes Kunden, den Namen der Kategorie, aus der er gekauft hat (in jeder seiner Bestellungen), und den Gesamtbetrag, den er für diese Produktkategorie ausgegeben hat (nennen Sie diese Spalte TotalAmount).

Lösung:

SELECT
  Cli.FirstName,
  Cli.LastName,
  C.Name,
  SUM(OI.Price) as TotalAmount
FROM Categories AS C
JOIN Products AS P
  ON C.Id = P.CategoryId
JOIN OrderItems AS OI
  ON P.Id = OI.ProductId
JOIN Orders AS O
  ON O.Id = OI.OrderId
JOIN Clients Cli
  ON Cli.Id = O.ClientId
GROUP BY Cli.FirstName, Cli.LastName, C.Name

Lösung: Wir verbinden die Tabellen Categories, Products, OrderItems, Orders, und Clients. Wir wählen den Vor- und Nachnamen des Kunden, den Namen der Kategorie und die Summe der Preise der Bestellpositionen. So können wir berechnen, wie viel Geld jeder Kunde in jeder Kategorie ausgegeben hat.

Wir gruppieren die Ergebnisse nach dem Vor- und Nachnamen des Kunden und nach dem Namen der Kategorie. Auf diese Weise werden alle Kaufpositionen für jeden Kunden und jede Kategorie gruppiert.

Weitere SQL Server-Übungen

Ich habe die vielfältige Welt der Daten mit T-SQL erkundet. Von der Aufdeckung der Geheimnisse hinter dem Verhalten von Katzen über die Analyse von Spielstrategien bis hin zur Wertschätzung von Kunst durch Zahlen - SQL ist mein zuverlässiges Werkzeug. Es hat die Art und Weise verändert, wie ich Fragen betrachte und die Geschichten entdecke, die in den Daten um uns herum verborgen sind.

Möchten Sie mehr über SQL Server erfahren? Sehen Sie sich diese großartigen Ressourcen an:

Wenn Sie bereit sind, Ihre Kenntnisse zu vertiefen, ist unser Kurs SQL-Übungssatz in MS SQL Server genau das Richtige für Sie. Er wurde entwickelt, um Ihre Grundlagen zu stärken und Ihre Fähigkeit, Daten effektiv zu analysieren und zu interpretieren, zu verbessern. Mit jeder Übung werden Sie sicherer und geschickter im Umgang mit komplexen Abfragen.

SQL Server-Praxis

Für diejenigen, die alle Aspekte von SQL erforschen möchten, deckt unser umfassender SQL von A bis Z in MS SQL Server Kurs alles von den Grundlagen bis zu fortgeschrittenen Techniken ab. Es ist der perfekte Lernpfad für alle, die SQL Server beherrschen und fundierte Entscheidungen auf der Grundlage von Dateneinblicken treffen wollen. Egal, ob Sie Anfänger sind oder Ihre Kenntnisse auffrischen möchten, diese Ressourcen werden Ihnen helfen, in der Welt der Daten erfolgreich zu sein.

Warten Sie nicht länger - beginnen Sie noch heute mit der Beherrschung von SQL Server und schöpfen Sie das volle Potenzial Ihrer Daten aus!