SQL-Abfragen schreiben: Ein praktischer Leitfaden mit Beispielen
SQL-Abfragen schreiben: Ein praktischer Leitfaden mit Beispielen
Structured Query Language (SQL) ist die universelle Methode zur Kommunikation mit relationalen Datenbanken, doch eine effektive Abfrage zu schreiben, ist mehr als nur ein paar Schlüsselwörter aneinanderzureihen. Es ist ein Prozess, der Logik, ein klares Verständnis Ihrer Daten und ein Gespür dafür erfordert, wie Datenbanken funktionieren. Dieser Leitfaden vermittelt Ihnen das Wissen, um SQL-Abfragen zu schreiben, die nicht nur korrekt, sondern auch effizient, lesbar und wartbar sind – unabhängig von Ihrem Datenbanksystem.
Was Sie lernen werden
Am Ende dieses Leitfadens können Sie SQL-Abfragen von Grund auf erstellen, Daten präzise filtern, sortieren und aggregieren. Sie verstehen die Bedeutung der Ausführungsreihenfolge von Abfragen und erhalten einen klaren Plan für das Schreiben komplexer SQL-Anweisungen, die eine professionelle Bereicherung darstellen. Eine SQL-Abfrage zu schreiben ist ein strukturierter Prozess, bei dem Klauseln in einer bestimmten Reihenfolge geschrieben werden, die sich von der Ausführungsreihenfolge des Datenbankmoduls unterscheidet.
Die Grundlage: Die SELECT-Anweisung
Im Zentrum des Datenabrufs steht die SELECT-Anweisung. Sie teilt der Datenbank genau mit, welche Informationen Sie sehen möchten und wo diese zu finden sind. Die grundlegendste Form einer Abfrage besteht aus den Klauseln SELECT und FROM.
SELECT spalte1, spalte2
FROM tabellenname;
Um beispielsweise Mitarbeiterschlüssel und Nachnamen aus einer Dimensionstabelle abzurufen, würden Sie Folgendes verwenden:
SELECT EmployeeKey, LastName
FROM DimEmployee;
Auch wenn SELECT * verlockend sein mag, um schnell alle Spalten anzuzeigen, gilt es in Produktionscode weithin als schlechte Praxis, da es unnötige Daten zurückgeben, die Leistung beeinträchtigen und Anwendungen beschädigen kann, wenn sich das Tabellenschema ändert. Geben Sie immer die benötigten Spalten an.
Logik aufbauen mit der WHERE-Klausel
Um Daten zu filtern und nur relevante Zeilen abzurufen, verwenden Sie die WHERE-Klausel. Sie gibt die Suchbedingung an, die Zeilen erfüllen müssen, um in die Ergebnisse aufgenommen zu werden. Die WHERE-Klausel folgt in der Struktur Ihrer Abfrage auf die FROM-Klausel.
Sie können verschiedene Operatoren verwenden, um leistungsstarke Suchbedingungen zu erstellen. Um beispielsweise einen bestimmten Mitarbeiter namens „Smith“ zu finden, können Sie einen einfachen Gleichheitsvergleich verwenden:
SELECT EmployeeKey, LastName
FROM DimEmployee
WHERE LastName = 'Smith';
Für komplexere Filter können Sie den LIKE-Operator für den Mustervergleich verwenden. Die folgende Abfrage findet alle Mitarbeiter, deren Nachname das Muster „Smi“ enthält:
SELECT EmployeeKey, LastName
FROM DimEmployee
WHERE LastName LIKE '%Smi%';
Logische Operatoren wie AND und OR ermöglichen es Ihnen, mehrere Bedingungen zu kombinieren. Sie können AND verwenden, um sicherzustellen, dass alle Bedingungen erfüllt sein müssen, und OR, wenn eine beliebige Bedingung wahr sein kann. Um beispielsweise Zeilen zu finden, die mehrere Kriterien erfüllen, könnten Sie schreiben:
SELECT EmployeeKey, LastName
FROM DimEmployee
WHERE EmployeeKey <= 500
AND LastName LIKE '%Smi%';
Es ist wichtig zu beachten, dass die WHERE-Klausel einzelne Zeilen filtert und keine aggregierten Ergebnisse filtern kann. Der IN-Operator ist eine prägnante Möglichkeit, zu prüfen, ob ein Wert mit einem aus einer Liste übereinstimmt, und BETWEEN wird verwendet, um Werte innerhalb eines Bereichs zu finden.
-- Verwendung von IN
SELECT EmployeeKey, LastName
FROM DimEmployee
WHERE LastName IN ('Smith', 'Godfrey', 'Johnson');
-- Verwendung von BETWEEN
SELECT EmployeeKey, LastName
FROM DimEmployee
WHERE EmployeeKey BETWEEN 100 AND 200;
Laut der Microsoft-Dokumentation gibt es keine Begrenzung für die Anzahl der Prädikate, die Sie in eine Suchbedingung aufnehmen können, was hochspezifische und komplexe Filterlogik ermöglicht.
Ergebnisse gestalten und organisieren
Nachdem Sie Ihre Daten gefiltert haben, möchten Sie diese oft zur besseren Lesbarkeit organisieren oder Berechnungen durchführen. Die ORDER BY-Klausel sortiert die Ergebnismenge basierend auf einer oder mehreren Spalten. Sie folgt auf die SELECT-Anweisung und kann aufsteigend (ASC, Standard) oder absteigend (DESC) sortieren. Um doppelte Zeilen aus Ihrer Ergebnismenge zu entfernen, verwenden Sie das Schlüsselwort DISTINCT direkt nach SELECT.
SELECT DISTINCT JobTitle
FROM HumanResources.Employee
ORDER BY JobTitle;
Die GROUP BY-Klausel ist ein leistungsstarkes Werkzeug zur Datenaggregation. Sie gruppiert Zeilen mit denselben Werten in angegebenen Spalten und ermöglicht Zusammenfassungsoperationen wie SUM, AVG, COUNT, MAX und MIN. Um beispielsweise die Summe jedes Verkaufsauftrags zu ermitteln, könnten Sie nach SalesOrderID gruppieren und die Positionssummen addieren:
SELECT SalesOrderID,
SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY SalesOrderID
ORDER BY SalesOrderID;
Wenn Sie die Ergebnisse einer GROUP BY filtern möchten, müssen Sie die HAVING-Klausel verwenden. Im Gegensatz zur WHERE-Klausel, die einzelne Zeilen vor der Gruppierung filtert, filtert HAVING Gruppen nach der Aggregation.
SELECT ProductID
FROM Sales.SalesOrderDetail
GROUP BY ProductID
HAVING AVG(OrderQty) > 5;
Die Reihenfolge, in der Sie diese Klauseln schreiben, ist entscheidend. Eine standardmäßige SQL-Abfrage folgt dieser Struktur: SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY.
Fortgeschrittene Techniken: Joins und Unterabfragen
Daten sind oft über mehrere Tabellen verteilt, und Sie führen sie mit JOIN-Klauseln zusammen. Ein INNER JOIN ruft Datensätze aus zwei Tabellen ab, bei denen die Join-Bedingung erfüllt ist. Beispielsweise können Sie die Tabelle Product mit SalesOrderDetail kombinieren, um Produktinformationen zusammen mit Verkaufsdaten zu erhalten.
Unterabfragen (Subqueries) oder verschachtelte Abfragen sind Abfragen innerhalb einer anderen Abfrage. Sie sind nützlich für die Datenmanipulation und -analyse, die von den Ergebnissen einer anderen Operation abhängt. Eine korrelierte Unterabfrage ist ein besonders komplexer Typ, bei dem die innere Abfrage für ihre Werte von der äußeren Abfrage abhängt und für jede verarbeitete Zeile der äußeren Abfrage wiederholt ausgeführt wird. Das Schlüsselwort EXISTS wird oft mit korrelierten Unterabfragen verwendet, um auf die Existenz von Zeilen in einer Unterabfrage zu prüfen.
Lesbare SQL-Abfragen schreiben
SQL zu schreiben, das funktioniert, ist nur die halbe Miete; SQL zu schreiben, das wartbar ist, ist eine professionelle Notwendigkeit. Befolgen Sie diese Best Practices, um sicherzustellen, dass Ihre Abfragen ein Werkzeug für die Zusammenarbeit und keine Quelle der Verwirrung sind:
- Schlüsselwörter großschreiben: Verwenden Sie Großbuchstaben für SQL-Schlüsselwörter wie
SELECT,FROM,WHEREundJOIN. Dies trennt sie von Spalten- und Tabellennamen und macht die Abfrage leichter lesbar. - Zeilenumbrüche und Einrückungen verwenden: Setzen Sie jede Hauptklausel in eine neue Zeile und verwenden Sie Einrückungen, um die Struktur von Unterabfragen oder Joins darzustellen. Diese visuelle Hierarchie verdeutlicht komplexe Logik.
- Aussagekräftige Kommentare hinzufügen: Verwenden Sie
--, um Kommentare hinzuzufügen, die das Warum hinter Ihrer Abfrage erklären, nicht das Was. Dies ist für Ihr zukünftiges Ich und Ihre Kollegen von unschätzbarem Wert. - Aussagekräftige Aliase verwenden: Wenn Sie Spalten mit
ASumbenennen oder Tabellennamen abkürzen, wählen Sie Aliase, die aussagekräftig sind. Vermeiden Sie vage Namen wiet1odera.
Quellen
- WHERE (Transact-SQL) – SQL Server
- T-SQL Tutorial: Write Transact-SQL Statements
- SELECT Examples (Transact-SQL)
- PostgreSQL: Documentation: 17: 2.5. Querying a Table
- Data Management with SQL for Ecologists: Accessing Data With Queries
- EXISTS (Transact-SQL) – SQL Server
- Transact-SQL Syntax Conventions (Transact-SQL)
- How to Write SQL Queries Anyone Can Understand
— Editorial Team
Noch keine Kommentare.