Wenn wir Daten aus einer Datenbank holen, interessieren uns selten wirklich alle Spalten. Zum Beispiel kann die Tabelle employees 15 Spalten haben: Vorname, Nachname, Geburtsdatum, Position, Gehalt, Einstellungsdatum und so weiter. Aber du willst vielleicht nur die Namen und Positionen wissen. Logisch, dass es sinnlos und ineffizient wäre, alles zu ziehen. Genau hier kommt die Kunst ins Spiel, gezielt bestimmte Spalten auszuwählen.
Wenn man einen Vergleich zieht, ist das so, als würdest du aus einem Korb mit Orangen, Äpfeln und Bananen nur die Äpfel rausnehmen. Ziemlich cool, oder? Genau das machen wir jetzt!
Syntax
Zur Erinnerung: SQL wurde so designt, dass es maximal user-friendly ist.
Erstens: Groß- und Kleinschreibung im Query ist egal. Du kannst SELECT, Select oder select schreiben – alles läuft. Zweitens: Zeilenumbrüche sind völlig egal. Die DBMS macht eh eine lange Zeile draus, also schreib’s, wie du willst.
Wie du dir wahrscheinlich schon denken kannst, ist mit den Keywords SELECT und FROM noch lange nicht Schluss. Sonst gäbe es ja nicht so viel Gerede über SQL. Die erweiterte Form eines SQL-Queries sieht so aus:
SELECT spalten
FROM tabelle
WHERE bedingung
GROUP BY spalten
HAVING spalten
ORDER BY sortierung
Wo:
spalten— das sind die Namen der Spalten, die du bekommen willst.tabelle— der Name der Tabelle, aus der die Daten kommen.bedingung— die Bedingung zum Filtern der Zeilen.sortierung— Zeilen und Sortierreihenfolge.
Klingt easy? Lass uns das mal an einem echten Beispiel anschauen. Aber wir starten erstmal mit was Einfachem.
Beispiel für eine einfache Query
Angenommen, wir haben eine Tabelle students, in der Infos über Studierende liegen. So könnte die Struktur aussehen:
| id | first_name | last_name | age | grade |
|---|---|---|---|---|
| 1 | Alex | Lin | 20 | A |
| 2 | Anna | Song | 22 | B |
| 3 | Otto | Art | 19 | A |
Jetzt wollen wir nur die Nachnamen last_name und Noten grade aller Studierenden wissen.
Der Query sieht dann so aus:
SELECT last_name, grade
FROM students;
Das Ergebnis:
| last_name | grade |
|---|---|
| Lin | A |
| Song | B |
| Art | A |
Glückwunsch, du hast gerade Ressourcen der Datenbank gespart und das Ergebnis lesbarer gemacht!
Strings zusammenkleben
Nur Daten auswählen kannst du jetzt schon, lass uns mal was Spannenderes probieren. In unserer Tabelle sind Vorname und Nachname in verschiedenen Spalten. Lass uns einen Query schreiben, der eine Spalte mit dem vollen Namen des Studenten liefert.
Um zwei Strings in PostgreSQL zu verbinden, nutzt man den Operator ||. Unser SELECT-Query sieht dann so aus:
SELECT first_name || last_name, grade
FROM students;
Das Ergebnis:
| first_name || last_name | grade |
|---|---|
| AlexLin | A |
| AnnaSong | B |
| OttoArt | A |
Hmm. Da fehlt doch was. Zum Beispiel ein Leerzeichen zwischen Vor- und Nachname! Lass uns das fixen.
SELECT first_name || ' ' || last_name, grade
FROM students;
Das Ergebnis:
| first_name || ' ' || last_name | grade |
|---|---|
| Alex Lin | A |
| Anna Song | B |
| Otto Art | A |
Nice. Der Inhalt der Ergebnistabelle gefällt mir, aber was ist mit der Überschrift? Da hätte ich gern full name oder einfach name stehen, aber nicht first_name || ' ' || last_name. Das sieht nicht schön aus und ist auch nicht praktisch. Aber auch dafür gibt’s eine Lösung.
Abfrage mit Aliassen
SQL-Queries kann man mit Aliassen viel lesbarer machen. Das ist einfach eine Möglichkeit, einer Spalte im Query einen neuen Namen zu geben. Aliase nutzt man mit dem Keyword AS (man kann es theoretisch weglassen, aber für die Lesbarkeit sollte man es lieber schreiben).
Hier ein Beispiel:
SELECT first_name AS "Vorname", last_name AS "Nachname", grade AS "Note"
FROM students;
Das Ergebnis:
| Vorname | Nachname | Note |
|---|---|---|
| Alex | Lin | A |
| Anna | Song | B |
| Otto | Art | A |
Hier haben wir:
- Die Spalten umbenannt, damit sie auf Deutsch verständlicher sind.
- Aliase im Query mit
ASverwendet.
Wenn dein Chef oder Kunde Daten mit Usern sehen will und dabei nicht graue Haare bekommen soll – Aliase sind dein Freund.
Jetzt lass uns unseren Query für den vollen Namen noch etwas verbessern.
SELECT first_name || ' ' || last_name AS "Voller Name", grade AS "Note"
FROM students;
Das Ergebnis:
| Voller Name | Note |
|---|---|
| Alex Lin | A |
| Anna Song | B |
| Otto Art | A |
Perfekt. Genau wie wir wollten.
Warum nur bestimmte Spalten auswählen?
- Performance
Stell dir vor, du arbeitest mit einer riesigen Tabelle mit Millionen Zeilen und hunderten Spalten. Alles zu holen mit SELECT * kann Minuten oder sogar Stunden dauern und zieht ordentlich Server-Ressourcen. So bekommst du nur das, was du wirklich brauchst.
- Lesbarkeit
Wenn du nur die nötigen Spalten abfragst, ist das Ergebnis viel leichter zu verstehen. Sonst sieht dein Ergebnis aus wie ein endloser Newsfeed am Freitagabend.
- Fehler minimieren
Je weniger Daten du im Query verarbeitest, desto geringer ist die Chance, dass was schiefgeht. Besonders, wenn du später noch mit diesen Daten arbeitest.
Woran solltest du denken?
Tabellen-Aliase
Eine andere Möglichkeit, mit langen Tabellennamen klarzukommen, ist die Verwendung von Tabellen-Aliasen. Sie sollten an den ursprünglichen Tabellennamen erinnern oder logisch zum Inhalt passen.
SELECT sa05.first_name, sa05.course_id
FROM students_archive_2005 AS sa05
Gerade wenn du lange Tabellennamen wie university_students_enrollments_records hast, kannst du usr oder us verwenden.
Typische Fehler bei der Auswahl bestimmter Spalten
Fehler in Spaltennamen. Wenn du einen Spaltennamen falsch schreibst, bekommst du eine Fehlermeldung wie:
ERROR: column "lastname" does not exist. Check die Schreibweise der Spaltennamen.Kollidierende Namen. Wenn mehrere Tabellen im Query sind, gib immer an, zu welcher Tabelle das Feld gehört. Zum Beispiel
students.first_name.Die Nutzung von
SELECT *– das ist eine Falle für Anfänger. Ja, es funktioniert und ist bequem, aber in großen Projekten ist das schlechte Praxis! Wähle immer nur die Spalten aus, die du wirklich brauchst.
GO TO FULL VERSION