20 grundlegende SQL-Abfragebeispiele für Einsteiger: Ein vollständiger Überblick
Inhaltsverzeichnis
- Was ist SQL?
-
Datensatz
- 1. Auswahl aller Spalten aus einer Tabelle
- 2. Auswählen einer Spalte aus einer Tabelle
- 3. Auswahl von zwei Spalten aus einer Tabelle
- 4. Auswahl von zwei (oder mehr) Spalten aus einer Tabelle und Filterung durch numerischen Vergleich in WHERE
- 5. Auswählen von zwei Spalten und Filtern mit einer Gleichheitsbedingung in WHERE
- 6. Auswählen von zwei Spalten und Ordnen nach einer Spalte
- 7. Auswahl von zwei Spalten und absteigende Sortierung nach einer Spalte
- 8. Auswählen von zwei Spalten aus einer Tabelle und absteigende Sortierung nach zwei Spalten
- 9. Auswahl von zwei Spalten mit einer komplexen logischen Bedingung in WHERE
- 10. Einfache Berechnungen auf Spalten
- 11. Verwendung von SUMME() und GRUPPE BY
- 12. Verwendung von COUNT() und GROUP BY
- 13. Verwendung von AVG() und GROUP BY
- 14. Verwendung von MIN() und GROUP BY
- 15. Verwendung von MAX() und GROUP BY
- 16. Verwendung von SUM(), WHERE und GROUP BY
- 17. Verwendung von COUNT(), WHERE und GROUP BY
- 18. Zugriff auf Daten in zwei Tabellen mit INNER JOIN
- 19. Zugriff auf Daten in zwei Tabellen mit INNER JOIN und Filterung mit WHERE
- 20. Zugriff auf Daten in zwei Tabellen mit INNER JOIN, Filtern mit WHERE und Sortieren mit ORDER BY
- Von grundlegenden SQL-Abfragen zum SQL-Master
Diese 20 grundlegenden Abfragen sind ein Muss in einem Starterpaket für jeden SQL-Anfänger. Diese Beispiele werden Sie auf Ihrem Weg zur Beherrschung von SQL voranbringen.
Sie haben sich in den Kopf gesetzt, SQL zu lernen, haben nach "basic sql query examples" oder etwas Ähnlichem gegoogelt, und nun starren Sie auf diesen Artikel. Und was nun? Alles Lernen beginnt mit den Grundlagen, also lassen Sie uns mit der grundlegendsten Frage beginnen:
Was ist SQL?
Als Erstes müssen Sie wissen, was SQL ist. SQL, die strukturierte Abfragesprache, ist eine Programmiersprache. Wie jede Sprache - egal ob Programmier- oder Natursprache - dient sie der Kommunikation, dem Gespräch. SQL ist dafür gedacht, mit einer Datenbank zu kommunizieren. Dazu verwenden wir Sätze, die wir Abfragen nennen, d. h. SQL-Befehle zum Abrufen von Daten aus der Datenbank.
Wir werden Ihnen in Kürze 20 Beispiele für grundlegende SQL-Abfragen zeigen, damit Sie mit der Datenbank sprechen können. Alle diese Abfragen werden in unserem SQL für Anfänger Dieser Kurs gibt Ihnen noch mehr Struktur, Beispiele und Aufgaben, die Sie lösen müssen. Er enthält 129 interaktive Übungen zur Abfrage einer oder mehrerer Tabellen, zur Aggregation und Gruppierung von Daten, zu JOINs, Unterabfragen und Mengenoperationen. Selbst mit den 20 kommenden Beispielen werden wir nicht alle Details oder sogar alle grundlegenden Abfragen zeigen. Deshalb empfehlen wir, den Kurs als Plattform zu nutzen, um die hier besprochenen Grundlagen zu üben.
Außerdem sind die meisten unserer Beispiele in unserem SQL für Anfänger Cheat Sheet übersichtlich dargestellt. Nehmen Sie es ruhig zur Hand - es könnte Ihnen helfen, das Folgende besser zu verstehen.
Lassen Sie uns keine Zeit verlieren! Wir stellen den Datensatz vor, und dann geht es ans Schreiben und Erklären von grundlegenden SQL-Abfragen.
Datensatz
Das Dataset besteht aus zwei Tabellen. Die erste ist unten abgebildet; Sie können diese Tabelle erstellen, indem Sie diese Abfrage von GitHub kopieren und ausführen.
id | first_name | last_name | department | salary |
---|---|---|---|---|
1 | Paul | Garrix | Corporate | 3,547.25 |
2 | Astrid | Fox | Private Individuells | 2,845.56 |
3 | Matthias | Johnson | Private Individuells | 3,009.41 |
4 | Lucy | Patterson | Private Individuells | 3,547.25 |
5 | Tom | Page | Corporate | 5,974.41 |
6 | Claudia | Conte | Corporate | 4,714.12 |
7 | Walter | Deer | Private Individuells | 3,547.25 |
8 | Stephanie | Marx | Corporate | 2,894.51 |
9 | Luca | Pavarotti | Private Individuells | 4,123.45 |
10 | Victoria | Pollock | Corporate | 4,789.53 |
Wie jede Tabelle hat auch diese einen Namen: employees
. Jede Tabelle hat Spalten, die ebenfalls Namen haben. Sie beschreiben, welche Daten jede Spalte enthält.
Die Spalten und Daten in der obigen Tabelle sind:
id
- Die eindeutige ID des Mitarbeiters und der Primärschlüssel der Tabelle.first_name
- Der Vorname des Mitarbeiters.last_name
- Der Nachname des Mitarbeiters.department
- Die Abteilung des Mitarbeiters.salary
- Das Monatsgehalt des Mitarbeiters in USD.
Daraus geht hervor, dass es sich bei dieser Tabelle um eine Liste der Mitarbeiter eines Unternehmens und ihrer Gehälter handelt. Es gibt auch Angaben zu den Abteilungen der Mitarbeiter. Alle Mitarbeiter arbeiten in der Verkaufsabteilung, wobei die Abteilung entweder Unternehmen oder Privatpersonen sein kann Individuell. Mit anderen Worten: Die Mitarbeiter verkaufen die Produkte des Unternehmens an Unternehmen und Privatpersonen.
Die andere Tabelle im Datensatz heißt quarterly_sales
. Sie ist unten abgebildet, und die Abfrage zur Erstellung der Tabelle finden Sie hier.
employee_id | q1_2022 | q2_2022 | q3_2022 | q4_2022 |
---|---|---|---|---|
8 | 3,471.41 | 14,789.25 | 3,478.34 | 1,254.23 |
4 | 5,417.81 | 12,846.23 | 8,741.54 | 3,589.99 |
10 | 1,547.52 | 1,269.66 | 1,478.65 | 2,474.33 |
1 | 8,715.55 | 8,465.65 | 24,747.82 | 3,514.36 |
3 | 12,774.51 | 24,784.31 | 12,223.34 | 8,451.51 |
2 | 4,989.23 | 5,103.22 | 4,897.98 | 5,322.05 |
7 | 18,415.66 | 15,279.37 | 14,634.44 | 14,445.12 |
6 | 2,498.63 | 8,741.45 | 3,997.65 | 2,497.21 |
5 | 6,349.74 | 7,555.55 | 6,944.35 | 7,788.01 |
9 | 4,485.36 | 4,101.50 | 8,787.45 | 7,648.90 |
Die Spalten sind:
employee_id
- Die eindeutige ID des Mitarbeiters. Außerdem ein Fremdschlüssel, der auf die Spalte id aus der Tabelleemployees
.q1_2022
- Die Verkäufe dieses Mitarbeiters im ersten Quartal 2022.q2_2022
- Die Verkäufe dieses Mitarbeiters im zweiten Quartal 2022.q3_2022
- Die Verkäufe dieses Mitarbeiters im dritten Quartal 2022.q4_2022
- Die Verkäufe dieses Mitarbeiters im vierten Quartal 2022.
Im Allgemeinen ist diese Tabelle eine Liste der Verkäufe jedes Quartals, die von jedem in der ersten Tabelle aufgeführten Mitarbeiter getätigt wurden.
Beginnen wir nun mit dem Schreiben von SQL-Abfragen.
1. Auswahl aller Spalten aus einer Tabelle
Diese Abfrage ist nützlich, wenn Sie schnell alle Spalten einer Tabelle abrufen möchten, ohne jede Spalte in die SELECT-Anweisung zu schreiben.
Abfrage
SELECT * FROM employees; |
Erläuterung
Wann immer Sie eine beliebige Anzahl von Spalten aus einer Tabelle auswählen wollen, müssen Sie die Anweisung SELECT
verwenden. Sie schreiben sie ganz offensichtlich mit dem Schlüsselwort SELECT
.
Nach dem Schlüsselwort folgt ein Sternchen (*
), das als Abkürzung für "alle Spalten der Tabelle" steht.
Um die Tabelle zu spezifizieren, verwenden Sie die Klausel FROM
und schreiben den Namen der Tabelle dahinter.
Ausgabe
Die Ausgabe der Abfrage ist die gesamte Tabelle employees
wie unten gezeigt.
id | first_name | last_name | department | salary |
---|---|---|---|---|
1 | Paul | Garrix | Corporate | 3,547.25 |
2 | Astrid | Fox | Private Individuells | 2,845.56 |
3 | Matthias | Johnson | Private Individuells | 3,009.41 |
4 | Lucy | Patterson | Private Individuells | 3,547.25 |
5 | Tom | Page | Corporate | 5,974.41 |
6 | Claudia | Conte | Corporate | 4,714.12 |
7 | Walter | Deer | Private Individuells | 3,547.25 |
8 | Stephanie | Marx | Corporate | 2,894.51 |
9 | Luca | Pavarotti | Private Individuells | 4,123.45 |
10 | Victoria | Pollock | Corporate | 4,789.53 |
2. Auswählen einer Spalte aus einer Tabelle
Sie können diese Abfrage verwenden, wenn Sie nur eine Spalte aus der Tabelle benötigen...
Abfrage
SELECT first_name FROM employees; |
Erläuterung
Die Vorgehensweise ist ähnlich wie bei der vorherigen Abfrage. Diesmal wird jedoch anstelle eines Sternchens der Name der spezifischen Spalte in SELECT
geschrieben. In diesem Fall ist es die Spalte first_name
.
Die zweite Zeile der Abfrage ist dieselbe: Sie verweist auf die Tabelle in der Klausel FROM
.
Ausgabe
Die Abfrage gibt die Liste der Vornamen der Mitarbeiter zurück.
first_name |
---|
Paul |
Astrid |
Matthias |
Lucy |
Tom |
Claudia |
Walter |
Stephanie |
Luca |
Victoria |
3. Auswahl von zwei Spalten aus einer Tabelle
Diese Abfrage ist nützlich, wenn zwei (oder mehr) Spalten aus einer Tabelle ausgewählt werden sollen.
Abfrage
SELECT first_name, last_name FROM employees; |
Erläuterung
Auch hier ist der Ansatz ähnlich wie bei den früheren Beispielen. Um zwei Spalten auszuwählen, müssen Sie deren Namen in SELECT
schreiben. Wichtig ist, dass die Spalten durch ein Komma getrennt werden. Im Beispiel sehen Sie, dass zwischen den Spalten first_name
und last_name
ein Komma steht.
Dann verweisen Sie wie üblich auf die Tabelle employees
in FROM
.
Ausgabe
Die Abfrage zeigt nun die vollständigen Namen der Mitarbeiter an.
first_name | last_name |
---|---|
Paul | Garrix |
Astrid | Fox |
Matthias | Johnson |
Lucy | Patterson |
Tom | Page |
Claudia | Conte |
Walter | Deer |
Stephanie | Marx |
Luca | Pavarotti |
Victoria | Pollock |
4. Auswahl von zwei (oder mehr) Spalten aus einer Tabelle und Filterung durch numerischen Vergleich in WHERE
Wenn Sie diese SQL-Abfrage kennen, können Sie Daten nach numerischen Werten filtern. Sie können dies mit Hilfe von Vergleichsoperatoren in der WHERE
Klausel tun.
Hier ist die Übersicht über die SQL-Vergleichsoperatoren.
Comparison Operator | Description |
---|---|
= | Is equal to |
> | Is greater than |
< | Is less than |
>= | Is greater than or equal to |
<= | Is less than or equal to |
<> | Is not equal to |
Abfrage
SELECT first_name, last_name, salary FROM employees WHERE salary > 3800; |
Erläuterung
Die Abfrage wählt eigentlich drei, nicht zwei Spalten aus. Es ist dasselbe wie bei zwei Spalten: Schreiben Sie sie einfach in SELECT
und trennen Sie sie mit Kommas.
Dann verweisen wir auf die Tabelle in FROM
.
Nun müssen wir nur die Mitarbeiter mit einem Gehalt über 3.800 anzeigen. Hierfür müssen Sie WHERE
verwenden. Dies ist eine Klausel, die Bedingungen akzeptiert und zum Filtern der Ausgabe verwendet wird. Sie durchläuft die Tabelle und gibt nur die Daten aus, die die Bedingung erfüllen.
In unserem Fall suchen wir nach Gehältern, die "größer" als eine bestimmte Zahl sind. Mit anderen Worten, eine Bedingung, die den Vergleichsoperator > verwendet.
Um die Bedingung festzulegen, schreiben wir den Spaltennamen in WHERE
. Dann kommt der Vergleichsoperator und danach der Wert, den die Daten übersteigen müssen. Diese Bedingung gibt nun alle Gehälter zurück, die über 3.800 liegen.
Ausgabe
Die Abfrage gibt vier Mitarbeiter und ihre Gehälter zurück. Wie Sie sehen können, liegen alle Gehälter über 3.800.
first_name | last_name | salary |
---|---|---|
Tom | Page | 5,974.41 |
Claudia | Conte | 4,714.12 |
Luca | Pavarotti | 4,123.45 |
Victoria | Pollock | 4,789.53 |
5. Auswählen von zwei Spalten und Filtern mit einer Gleichheitsbedingung in WHERE
Auch dieses Beispiel einer einfachen SQL-Abfrage ist nützlich, wenn Sie mehrere Spalten, aber nicht alle Zeilen der Tabelle auswählen möchten. Jetzt wollen Sie die Werte finden, die mit dem Wert aus der Bedingung übereinstimmen. Dazu benötigen Sie die Gleichheitsbedingung (=
).
Abfrage
SELECT first_name, last_name FROM employees WHERE first_name = 'Luca' ; |
Erläuterung
Die Abfrage wählt die Vor- und Nachnamen der Mitarbeiter aus.
Wir wollen aber nur die Mitarbeiter anzeigen, deren Name Luca ist. Dazu verwenden wir wieder WHERE
. Die Vorgehensweise ist ähnlich wie im vorherigen Beispiel: Wir verwenden WHERE, schreiben den Spaltennamen und verwenden den Vergleichsoperator. Dieses Mal verwendet unsere Bedingung das Gleichheitszeichen (=
).
Mit anderen Worten: Die Werte in der Spalte first_name
müssen gleich Luca sein. Wenn es sich bei der Bedingung nicht um eine Zahl, sondern um einen Text oder ein Datum/eine Uhrzeit handelt, muss sie in einfache Anführungszeichen gesetzt werden (''
). Deshalb wird unsere Bedingung als "Luca
" und nicht einfach als Luca
geschrieben.
Ausgabe
Die Ausgabe zeigt, dass es nur einen Mitarbeiter namens Luca gibt, und sein vollständiger Name ist Luca Pavarotti.
first_name | last_name |
---|---|
Luca | Pavarotti |
6. Auswählen von zwei Spalten und Ordnen nach einer Spalte
Hier ist ein weiteres Beispiel für eine einfache SQL-Abfrage, die Sie nützlich finden werden. Es kann immer dann verwendet werden, wenn Sie die Ausgabe auf eine bestimmte Art und Weise ordnen müssen, um sie besser lesbar zu machen.
Das Ordnen oder Sortieren der Ausgabe erfolgt mit der ORDER BY
Klausel. Standardmäßig wird die Ausgabe in aufsteigender Reihenfolge sortiert, d. h. alphabetisch (bei Textdaten), von der niedrigsten bis zur höchsten Zahl (bei numerischen Daten) oder vom ältesten bis zum neuesten Datum oder der neuesten Uhrzeit (bei Daten und Uhrzeiten).
Abfrage
SELECT first_name, last_name FROM employees ORDER BY last_name; |
Erläuterung
Wir wählen wieder die Vor- und Nachnamen der Mitarbeiter aus. Aber jetzt wollen wir die Ausgabe auf eine bestimmte Weise sortieren. In diesem Beispiel ist es der Nachname der Mitarbeiter. Dazu verwenden wir ORDER BY
. Darin geben wir einfach den Spaltennamen ein.
Danach können wir das Schlüsselwort ASC
hinzufügen, um die Ausgabe aufsteigend zu sortieren. Dies ist jedoch nicht zwingend erforderlich, da die aufsteigende Sortierung eine Standardeinstellung in SQL ist.
Ausgabe
Die Abfrage gibt eine Liste von Mitarbeitern zurück, die alphabetisch nach ihren Nachnamen geordnet sind.
first_name | last_name |
---|---|
Claudia | Conte |
Walter | Deer |
Astrid | Fox |
Paul | Garrix |
Matthias | Johnson |
Stephanie | Marx |
Tom | Page |
Lucy | Patterson |
Luca | Pavarotti |
Victoria | Pollock |
7. Auswahl von zwei Spalten und absteigende Sortierung nach einer Spalte
Dieses Beispiel ähnelt dem vorherigen und hat den gleichen Zweck: die Sortierung der SQL-Abfrageausgabe. In diesem Fall werden die Daten jedoch in absteigender Reihenfolge sortiert (Z bis A, 10 bis 1).
Abfrage
SELECT first_name, last_name FROM employees ORDER BY last_name DESC ; |
Erläuterung
Die Abfrage ist fast genau dieselbe wie im vorherigen Beispiel. Der einzige Unterschied ist, dass wir die Ausgabe nach dem Namen des Mitarbeiters absteigend sortieren.
Dazu fügen Sie das Schlüsselwort DESC
nach der Spalte last_name
in die Klausel ORDER BY
ein.
Ausgabe
first_name | last_name |
---|---|
Victoria | Pollock |
Luca | Pavarotti |
Lucy | Patterson |
Tom | Page |
Stephanie | Marx |
Matthias | Johnson |
Paul | Garrix |
Astrid | Fox |
Walter | Deer |
Claudia | Conte |
Wie Sie sehen, ist die Ausgabe so geordnet, wie wir es wollten.
8. Auswählen von zwei Spalten aus einer Tabelle und absteigende Sortierung nach zwei Spalten
Das Sortieren einer SQL-Abfrage kann noch komplizierter werden. Es ist üblich, Daten nach zwei oder mehr Spalten zu sortieren, womit Sie als Excel- oder Google Sheets-Benutzer wahrscheinlich bereits vertraut sind. Das Gleiche kann in SQL gemacht werden.
Abfrage
SELECT first_name, last_name, salary FROM employees ORDER BY salary DESC , last_name ASC ; |
Erläuterung
Mit dieser Abfrage bauen wir auf dem vorherigen Beispiel auf; wir möchten die Ausgabe nach dem Gehalt und dem Nachnamen des Mitarbeiters sortieren. Diesmal sortieren wir nach dem Gehalt absteigend und dann nach dem Nachnamen aufsteigend.
Wir verweisen auf die Spalte Gehalt in ORDER BY
und folgen ihr mit dem Schlüsselwort DESC
. Das Schlüsselwort DESC
gibt die absteigende Reihenfolge an. Vor dem zweiten Ordnungskriterium müssen wir ein Komma setzen. Danach folgt das zweite Kriterium/Spalte, in diesem Fall last_name
. Sie können das Schlüsselwort ASC hinzufügen oder weglassen, um die Ausgabe in aufsteigender Reihenfolge zu sortieren.
Hinweis: Die Reihenfolge der Spalten in ORDER BY ist wichtig! Die Abfrage, wie sie oben geschrieben ist, wird zuerst nach dem Gehalt absteigend und dann nach dem Nachnamen aufsteigend sortiert. Wenn Sie ORDER BY last_name ASC, salary DESC
schreiben würden, würde zuerst nach dem Nachnamen und dann nach dem Gehalt in absteigender Reihenfolge sortiert.
Ausgabe
first_name | last_name | salary |
---|---|---|
Tom | Page | 5,974.41 |
Victoria | Pollock | 4,789.53 |
Claudia | Conte | 4,714.12 |
Luca | Pavarotti | 4,123.45 |
Walter | Deer | 3,547.25 |
Paul | Garrix | 3,547.25 |
Lucy | Patterson | 3,547.25 |
Matthias | Johnson | 3,009.41 |
Stephanie | Marx | 2,894.51 |
Astrid | Fox | 2,845.56 |
Die Ausgabe ist nach Gehalt geordnet. Wenn das Gehalt gleich ist (grüne Zeilen), werden die Daten alphabetisch nach dem Nachnamen sortiert.
9. Auswahl von zwei Spalten mit einer komplexen logischen Bedingung in WHERE
In diesem Beispiel wird erneut gezeigt, wie die Ausgabe mit WHERE gefiltert werden kann. Dieses Mal ist es etwas fortgeschrittener, da wir einen logischen Operator verwenden. In SQL können Sie mit logischen Operatoren testen, ob die Filterbedingung erfüllt ist oder nicht. Sie ermöglichen auch die Festlegung mehrerer Bedingungen.
Die drei grundlegenden logischen Operatoren in SQL sind AND, OR und NOT. In der folgenden Abfrage verwenden wir OR, um Gehälter unter 3.000 oder über 5.000 zu erhalten.
Abfrage
SELECT first_name, last_name, salary FROM employees WHERE salary > 5000 OR salary < 3000; |
Erläuterung
Wir verwenden diese Abfrage, um den Vornamen, den Nachnamen und das Gehalt des Mitarbeiters aus der Tabelle auszuwählen employees
.
Wir möchten jedoch nur die Mitarbeiter anzeigen, deren Gehalt entweder über 5.000 $ oder unter 3.000 $ liegt. Dazu verwenden wir den logischen Operator OR und die Vergleichsoperatoren in WHERE
.
Wir schreiben die erste Bedingung in WHERE
, wo wir auf die Spalte salary
verweisen und die Bedingung festlegen, dass die Werte über 5.000 liegen müssen. Dann verwenden wir den Operator OR
, gefolgt von der zweiten Bedingung. Die zweite Bedingung verweist wiederum auf die Spalte "Gehalt" und verwendet den Operator "kleiner als", um die Werte unter 3.000 zurückzugeben.
Ausgabe
first_name | last_name | salary |
---|---|---|
Astrid | Fox | 2,845.56 |
Tom | Page | 5,974.41 |
Stephanie | Marx | 2,894.51 |
Die Abfrage gibt nur drei Mitarbeiter und ihre Gehälter zurück, da nur sie die Bedingungen erfüllen.
10. Einfache Berechnungen auf Spalten
In diesem Beispiel zeigen wir, wie Sie einfache mathematische Operationen mit den Spalten der Tabelle durchführen können.
Wir werden einen der arithmetischen Operatoren von SQL verwenden.
Arithmetic Operator | Description |
---|---|
+ | Addition |
- | Subtraction |
* | Multiplication |
/ | Division |
% | Modulo, i.e. returns the remainder of the integer division. |
Abfrage
SELECT employee_id, q1_2022 + q2_2022 AS h1_2022 FROM quarterly_sales; |
Erläuterung
In der obigen Abfrage wollen wir den Umsatz im ersten Halbjahr 2022 für jeden Mitarbeiter finden.
Dazu wählen wir zunächst die Spalte employee_id
aus der Tabelle quarterly_sales
aus.
Dann wählen wir die Spalte q1_2022
aus und verwenden den arithmetischen Operator Addition, um die Spalte q2_2022
hinzuzufügen. Außerdem geben wir dieser neuen berechneten Spalte mit dem Schlüsselwort AS
einen Alias von h1_2022
.
Ausgabe
employee_id | h1_2022 |
---|---|
8 | 18,260.66 |
4 | 18,264.04 |
10 | 2,817.18 |
1 | 17,181.20 |
3 | 37,558.82 |
2 | 10,092.45 |
7 | 33,695.03 |
6 | 11,240.08 |
5 | 13,905.29 |
9 | 8,586.86 |
Die Ausgabe zeigt alle IDs der Mitarbeiter und ihre jeweiligen Umsätze im ersten Halbjahr 2022.
11. Verwendung von SUMME() und GRUPPE BY
Diese Abfrage verwendet die Aggregatfunktion SUM()
mit GROUP BY. In SQL arbeiten Aggregatfunktionen mit Datengruppen; zum Beispiel zeigt SUM(sales)
die Summe aller Werte in der Spalte sales
. Es ist nützlich, diese Funktion zu kennen, wenn Sie Daten in Gruppen zusammenfassen und die Summe für jede Gruppe anzeigen möchten.
Abfrage
SELECT department, SUM (salary) AS total_salaries FROM employees GROUP BY department; |
Erläuterung
Der Zweck der obigen Abfrage ist es, den Gesamtbetrag der Gehälter für jede Abteilung zu ermitteln. Dies wird auf folgende Weise erreicht.
Wählen Sie zunächst die Spalte Abteilung aus der Tabelle employees
aus. Dann verwenden Sie die Funktion SUM()
. Da wir die Gehaltswerte addieren wollen, geben wir in der Funktion die Spalte Gehalt an. Außerdem geben wir dieser berechneten Spalte den Alias total_salaries
.
Schließlich wird die Ausgabe nach der Spalte Abteilung gruppiert.
Hinweis: Jede nicht gruppierte Spalte, die in SELECTerscheint , muss auch in GROUP BY erscheinen . Aber das ist logisch - der ganze Zweck ist es, die Daten nach Abteilung zu gruppieren, also werden wir sie natürlich in GROUP BY
einfügen.
Ausgabe
department | total_salaries |
---|---|
Corporate | 21,919.82 |
Private Individuells | 17,072.92 |
Die Ausgabe zeigt alle Abteilungen und die Summe der gesamten monatlichen Lohnkosten pro Abteilung.
12. Verwendung von COUNT() und GROUP BY
Hier ist eine weitere einfache SQL-Abfrage, die eine Aggregatfunktion verwendet. Diesmal ist es COUNT()
. Sie können sie verwenden, wenn Sie Daten gruppieren und die Anzahl der Vorkommen in jeder Gruppe anzeigen möchten.
Abfrage
SELECT department, COUNT (*) AS employees_by_department FROM employees GROUP BY department; |
Erläuterung
Wir möchten die Anzahl der Mitarbeiter nach Abteilung anzeigen.
Wählen Sie die Abteilung aus der Tabelle employees
aus. Verwenden Sie dann die Aggregatfunktion COUNT()
. In diesem Fall verwenden wir die Version COUNT(*)
, die alle Zeilen zählt. Wir geben der Spalte den Alias employees_by_department
.
Als letzten Schritt gruppieren wir die Ausgabe nach der Abteilung.
Hinweis: COUNT(*)
zählt alle Zeilen, einschließlich derjenigen mit den Werten NULL
. Wenn Sie die möglichen NULL-Werte nicht in Ihre Ausgabe aufnehmen wollen, verwenden Sie die COUNT(column_name)
Version der Funktion. Wir können hier COUNT(*)
verwenden, da wir wissen, dass keine NULL
Werte in der Tabelle vorhanden sind.
Ausgabe
department | employees_by_department |
---|---|
Corporate | 5 |
Private Individuells | 5 |
Es gibt zwei Abteilungen mit jeweils fünf Mitarbeitern.
13. Verwendung von AVG() und GROUP BY
Die Funktion AVG()
berechnet den Durchschnittswert. Sie können diese Abfrage immer dann verwenden, wenn Sie Daten gruppieren und den Durchschnittswert für jede Gruppe anzeigen möchten.
Abfrage
SELECT department, AVG (salary) AS average_salary FROM employees GROUP BY department; |
Erläuterung
Die Abfrage ist die gleiche wie die letzte, nur verwenden wir diesmal die Funktion AVG()
, da wir das Durchschnittsgehalt nach Abteilung berechnen wollen.
Wir wählen die Abteilung aus, verwenden AVG()
mit der Spalte salary
, und gruppieren die Ausgabe nach Abteilung.
Ausgabe
department | average_salary |
---|---|
Corporate | 4,383.96 |
Private Individuells | 3,414.58 |
Die Ausgabe zeigt zwei Abteilungen und ihre Durchschnittsgehälter.
14. Verwendung von MIN() und GROUP BY
Dies ist eine weitere Abfrage, die eine Aggregatfunktion mit GROUP BY
kombiniert. Verwenden Sie sie immer dann, wenn Sie die Mindestwerte für jede Gruppe finden möchten.
Abfrage
SELECT department, MIN (salary) AS minimum_salary FROM employees GROUP BY department; |
Erläuterung
Wir verwenden wieder dieselbe Abfrage und ändern nur die Aggregatfunktion.
Die Abfrage berechnet das Mindestgehalt nach Abteilung.
Ausgabe
department | minimum_salary |
---|---|
Corporate | 2,894.51 |
Private Individuells | 2,845.56 |
Die Ausgabe zeigt die Abteilungen und das niedrigste Gehalt in jeder Abteilung.
15. Verwendung von MAX() und GROUP BY
Dieses Beispiel zeigt, wie Sie die Aggregatfunktion MAX()
verwenden, um den höchsten Wert innerhalb jeder Gruppe anzuzeigen.
Abfrage
SELECT department, MAX (salary) AS maximum_salary FROM employees GROUP BY department; |
Erläuterung
Wir verwenden die Abfrage, um das höchste Gehalt in jeder Abteilung zusammen mit dem Namen der Abteilung anzuzeigen.
Sie wissen bereits, wie das funktioniert. Die Abfrage ist dieselbe wie im vorigen Beispiel, aber jetzt wird die Funktion MAX()
verwendet.
Ausgabe
department | maximum_salary |
---|---|
Corporate | 5,974.41 |
Private Individuells | 4,123.45 |
Die Ausgabe zeigt uns die höchsten Gehälter in der Abteilung Corporate and Private Individuells.
16. Verwendung von SUM(), WHERE und GROUP BY
Diese Abfrage mag komplizierter erscheinen, ist aber dennoch eine grundlegende SQL-Abfrage. Sie wird verwendet, wenn Sie die Gesamtwerte für jede Gruppe anzeigen möchten, aber nur bestimmte Zeilen in die Summe einbeziehen wollen.
Abfrage
SELECT department, SUM (salary) AS total_salary FROM employees WHERE salary > 3500 GROUP BY department; |
Erläuterung
Die Abfrage zeigt die Gesamtsumme der Gehälter nach Abteilung an, bezieht aber nur einzelne Gehälter über 3.500 $ in die Summe ein. So funktioniert sie.
Zuerst wählen Sie natürlich die Abteilungen aus und verwenden SUM()
mit der Gehaltsspalte aus der Tabelle employees
. Das haben Sie bereits gelernt.
Dann verwenden Sie die Klausel WHERE
, um die Werte anzugeben, die in die Summe eingehen sollen. In diesem Fall ist es, wenn die Spalte Gehalt höher als 3.500 ist. Mit anderen Worten, die Abfrage summiert jetzt nur Werte über 3.500.
Schließlich gruppieren Sie nach Abteilung.
Ausgabe
department | total_salary |
---|---|
Private Individuells | 11,217.95 |
Corporate | 19,025.31 |
Diese Gesamtbeträge enthalten jetzt nur noch Gehälter über 3.500 $. Vergleichen Sie dies mit der Ausgabe des elften Beispiels (siehe unten; beachten Sie die unterschiedliche Sortierung), und Sie werden sehen, dass die Gesamtsummen niedriger sind. Das ist logisch, da die untenstehende Ausgabe auch Gehälter von 3.500 $ oder weniger enthält.
department | total_salaries |
---|---|
Corporate | 21,919.82 |
Private Individuells | 17,072.92 |
17. Verwendung von COUNT(), WHERE und GROUP BY
Dies ist ebenfalls eine der Abfragen, die wir Ihnen empfehlen, in Ihre SQL-Toolbox aufzunehmen. Sie ähnelt der vorherigen Abfrage, da sie eine Aggregatfunktion verwendet. Diese Art der Abfrage kann verwendet werden, wenn Sie die Anzahl der Vorkommen für jede Gruppe anzeigen möchten.
Abfrage
SELECT department, COUNT (*) AS number_of_employees FROM employees WHERE salary > 3500 GROUP BY department; |
Erläuterung
Diese Abfrage ähnelt der vorherigen Abfrage, nur dass sie die Aggregatfunktion COUNT()
verwendet. Ihr Ziel ist es, den Namen der Abteilung und die Anzahl der Mitarbeiter in dieser Abteilung anzuzeigen, aber sie zählt nur die Mitarbeiter mit einem Gehalt über 3.500 $.
To achieve that, first select the department. Then use
COUNT(*), um alle Zeilen innerhalb jeder Abteilung zu zählen. Jede Zeile entspricht einem Mitarbeiter. Es steht uns frei, diese Version der Funktion COUNT()
zu verwenden, da wir wissen, dass es keine NULL
Zeilen gibt.
Verwenden Sie nun WHERE
, um nur Mitarbeiter mit Gehältern über 3500 $ in die Zählung einzubeziehen.
Am Ende müssen Sie die Daten nur noch nach Abteilung gruppieren.
Ausgabe
department | number_of_employees |
---|---|
Private Individuells | 3 |
Corporate | 4 |
Die Ausgabe zeigt, dass es drei Angestellte in der Abteilung Privat Individuellgibt, die mehr als 3.500 $ verdienen, und vier Angestellte in der Abteilung Unternehmen.
Offensichtlich fehlen einige Angestellte, wie es auch sein sollte. In einem der vorherigen Beispiele haben wir gelernt, dass es in jeder Abteilung fünf Angestellte gibt.
18. Zugriff auf Daten in zwei Tabellen mit INNER JOIN
Diese Art der Abfrage wird immer dann verwendet, wenn Sie auf Daten aus zwei oder mehr Tabellen zugreifen möchten. Wir zeigen Ihnen INNER JOIN, aber das ist nicht der einzige Join-Typ, den Sie verwenden können.
Hier ist ein kurzer Überblick über die Join-Typen in SQL. Dies sind die vollständigen Join-Namen. Was in den Klammern steht, kann in der Abfrage weggelassen werden, und der Join funktioniert auch ohne diese Angaben.
SQL Join Type | Description |
---|---|
(INNER) JOIN | Returns the matching values from both tables. |
LEFT (OUTER) JOIN | Returns all the values from the left table and only the matching values from the right table. |
RIGHT (OUTER) JOIN | Returns all the values from the right table and only the matching values from the left table. |
FULL (OUTER) JOIN | Returns all the rows from both tables. |
CROSS JOIN | Returns all combinations of all rows from the first and second table, i.e. the Cartesian product. |
Abfrage
SELECT e.id, e.first_name, e.last_name, qs.q1_2022 + qs.q2_2022 + qs.q3_2022 + qs.q4_2022 AS total_sales_2022 FROM employees e JOIN quarterly_sales qs ON e.id = qs.employee_id; |
Erläuterung
Diese Abfrage möchte die ID und den Namen jedes Mitarbeiters zusammen mit seinem Gesamtumsatz im Jahr 2022 anzeigen.
Dazu verwendet sie JOIN
, da die erforderlichen Daten in beiden Tabellen unseres Datensatzes enthalten sind.
Beginnen wir die Erklärung der Abfrage mit der FROM
Klausel. Sie ist bekannt: Um die Daten aus der Tabelle employees
zu verwenden, müssen Sie sie in FROM
referenzieren. Wir geben dieser Tabelle auch einen Alias ("e"), damit wir später nicht den vollen Namen der Tabelle schreiben müssen.
Danach verwenden wir das Schlüsselwort JOIN
, um die zweite Tabelle zu verbinden. Dazu verweisen wir auf die Tabelle
in quarterly_sales
JOIN
und geben ihr den Alias 'qs'.
Nun folgt die Bedingung ON
. Sie wird verwendet, um die Spalten anzugeben, über die die beiden Tabellen verbunden werden sollen. Normalerweise sind das die Spalten, die in beiden Tabellen die gleichen Daten enthalten. Mit anderen Worten, wir verbinden die Tabellen über die Primär- und Fremdschlüssel. Ein Primärschlüssel ist eine Spalte (oder Spalten), die jede Zeile in der Tabelle eindeutig definiert. Ein Fremdschlüssel ist eine Spalte in der zweiten Tabelle, die sich auf die erste Tabelle bezieht. In unserem Beispiel ist die Spalte id
aus der Tabelle employees
der Primärschlüssel. Die Spalte employee_id
aus der Tabelle quarterly_sales
ist der Fremdschlüssel, da sie den Wert der Spalte id
aus der ersten Tabelle enthält.
Wir werden diese Spalten also in ON
verwenden, müssen aber auch angeben, aus welcher Tabelle jede Spalte stammt. Erinnern Sie sich daran, dass wir unseren Tabellen Aliasnamen gegeben haben. Das ist hier sehr nützlich, da wir nicht die vollständigen Namen der Tabellen schreiben müssen, sondern nur einen Buchstaben für jede Tabelle. Wir schreiben den Alias der ersten Tabelle (anstelle ihres vollständigen Namens), trennen sie mit einem Punkt und dann den Spaltennamen. Wir setzen das Gleichheitszeichen, den Alias der zweiten Tabelle und den Spaltennamen ein.
Nun, da wir zwei Tabellen verbunden haben, können wir jede Spalte aus beiden Tabellen auswählen. Wir wählen id
, first_name
und last_name
aus employees
aus. Dann fügen wir jede Spalte aus der Tabelle quarterly_sales hinzu, die die Quartalsumsätze anzeigt, und nennen sie total_sales_2022
. Jeder Spalte in SELECT
wird auch der Tabellenalias vorangestellt, wobei der Alias und der Spaltenname durch einen Punkt getrennt sind.
Hinweis: Bei der Verknüpfung von Tabellen ist es ratsam, die Tabellennamen vor den Spaltennamen in SELECT
zuverwenden . So lässt sich leichter feststellen, welche Spalte aus welcher Tabelle stammt. Außerdem können die Tabellen gleichnamige Spalten haben. Allerdings können Tabellennamen wortreich werden, so dass es auch ratsam ist, ihnen in JOIN
Aliasnamen zu geben. Auf diese Weise können Sie viel kürzere Aliasnamen (anstelle der vollständigen Tabellennamen) vor den Spaltennamen verwenden.
Ausgabe
id | first_name | last_name | total_sales_2022 |
---|---|---|---|
8 | Stephanie | Marx | 22,993.23 |
4 | Lucy | Patterson | 30,595.57 |
10 | Victoria | Pollock | 6,770.16 |
1 | Paul | Garrix | 45,443.38 |
3 | Matthias | Johnson | 58,233.67 |
2 | Astrid | Fox | 20,312.48 |
7 | Walter | Deer | 62,774.59 |
6 | Claudia | Conte | 17,734.94 |
5 | Tom | Page | 28,637.65 |
9 | Luca | Pavarotti | 25,023.21 |
Die Ausgabe listet jeden Mitarbeiter auf und zeigt seinen Gesamtumsatz im Jahr 2022.
19. Zugriff auf Daten in zwei Tabellen mit INNER JOIN und Filterung mit WHERE
Natürlich können Sie Daten in verknüpften Tabellen auf die gleiche Weise filtern, wie Sie es mit nur einer Tabelle können. Dazu benötigen Sie wieder die WHERE
Klausel.
Abfrage
SELECT e.id, e.first_name, e.last_name, qs.q4_2022-qs.q3_2022 AS sales_change FROM employees e JOIN quarterly_sales qs ON e.id = qs.employee_id WHERE qs.q4_2022-qs.q3_2022 < 0; |
Erläuterung
Wir haben die vorherige Abfrage so verändert, dass der Umsatzrückgang zwischen dem dritten und dem vierten Quartal angezeigt wird.
So haben wir es gemacht. Genau wie zuvor haben wir die ID und den Namen des Mitarbeiters ausgewählt.
Wir haben ein Quartal vom anderen subtrahiert, um die Veränderung zwischen den Quartalen zu berechnen. In diesem Fall handelt es sich um die Spalte mit dem Umsatz des vierten Quartals abzüglich des Umsatzes des dritten Quartals. Diese neue Spalte heißt sales_change
.
Die Tabellen werden auf die gleiche Weise wie im vorherigen Beispiel verbunden.
Um nur den Umsatzrückgang anzuzeigen, verwenden wir die Klausel WHERE
. Darin subtrahieren wir wiederum das dritte Quartal vom vierten und legen die Bedingung fest, dass das Ergebnis unter Null liegen muss, d. h. ein Rückgang. Wie Sie gesehen haben, kommt WHERE
nach der Verknüpfung der Tabellen.
Ausgabe
id | first_name | last_name | sales_change |
---|---|---|---|
8 | Stephanie | Marx | -2,224.11 |
4 | Lucy | Patterson | -5,151.55 |
1 | Paul | Garrix | -21,233.46 |
3 | Matthias | Johnson | -3,771.83 |
7 | Walter | Deer | -189.32 |
6 | Claudia | Conte | -1,500.44 |
9 | Luca | Pavarotti | -1,138.55 |
Die Ausgabe zeigt alle Arbeitnehmer, die im letzten Quartal einen Umsatzrückgang zu verzeichnen hatten, und den Betrag dieses Rückgangs.
20. Zugriff auf Daten in zwei Tabellen mit INNER JOIN, Filtern mit WHERE und Sortieren mit ORDER BY
Sie haben wahrscheinlich bemerkt, dass die Ausgaben in unseren beiden letzten Beispielen etwas willkürlich sortiert sind. Damit müssen Sie sich nicht abfinden - Sie können die Daten mit ORDER BY
auch bei Verwendung von zwei Tabellen ordnen.
Abfrage
SELECT e.id, e.first_name, e.last_name, qs.q4_2022 FROM employees e JOIN quarterly_sales qs ON e.id = qs.employee_id WHERE qs.q4_2022 > 5000 ORDER BY qs.q4_2022 DESC ; |
Erläuterung
Die Abfrage unterscheidet sich nicht wesentlich von der vorherigen. Wir wählen wieder die ID und den Namen des Mitarbeiters aus. Wir fügen auch die Umsätze im letzten Quartal des Jahres hinzu. Die Tabellen werden dann auf dieselbe Weise verbunden wie zuvor. Wir verwenden die WHERE
Klausel, um nur die vierteljährlichen Verkäufe über 5.000 $ anzuzeigen.
Außerdem wollen wir die Ausgabe sortieren. Dies unterscheidet sich nicht von dem, was wir zuvor gelernt haben: Schreiben Sie einfach den Spaltennamen in ORDER BY
und sortieren Sie ihn auf die gewünschte Weise. In unserem Beispiel sortieren wir nach dem höchsten und dem niedrigsten Quartalsumsatz.
Ausgabe
id | first_name | last_name | q4_2022 |
---|---|---|---|
7 | Walter | Deer | 14,445.12 |
3 | Matthias | Johnson | 8,451.51 |
5 | Tom | Page | 7,788.01 |
9 | Luca | Pavarotti | 7,648.90 |
2 | Astrid | Fox | 5,322.05 |
Die Ausgabe zeigt alle fünf Mitarbeiter, deren Umsatz in den letzten drei Monaten des Jahres 2022 über 5.000 $ lag.
Von grundlegenden SQL-Abfragen zum SQL-Master
Wenn Sie SQL beherrschen wollen, müssen Sie mit diesen 20 grundlegenden SQL-Abfragen vertraut sein. Dies sind die Grundlagen, die es Ihnen ermöglichen, solide SQL-Kenntnisse aufzubauen.
Diese Art von Wissen erlangt man durch viel Übung und Erfahrung. Mit anderen Worten: Sie müssen die Abfragen einfach selbst schreiben. Auf diese Weise werden Sie alle Konzepte, die Sie hier gelernt haben, festigen. Dabei werden Sie wahrscheinlich eine Menge Fehler machen. Das ist wünschenswert, denn es gibt keine bessere Art zu lernen, als zu versuchen, die eigenen Fehler zu korrigieren.
Dafür brauchen Sie viele Abfragebeispiele. Nein, es ist nicht nötig, eigene Beispiele zu erstellen, wie wir es hier getan haben. Sie können, wenn Sie wollen. Aber das haben wir bereits in unserem Kurs SQL für Anfänger für Sie getan.
Er ist randvoll mit Beispielen für grundlegende SQL-Abfragen! Probieren Sie es aus, und Sie werden es sicher nicht bereuen!