CodeGym /Kurse /SQL SELF /Auswahl bestimmter Spalten: Daten nach Spaltennamen abfra...

Auswahl bestimmter Spalten: Daten nach Spaltennamen abfragen

SQL SELF
Level 2 , Lektion 0
Verfügbar

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:

  1. Die Spalten umbenannt, damit sie auf Deutsch verständlicher sind.
  2. Aliase im Query mit AS verwendet.

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?

  1. 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.

  1. 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.

  1. 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

  1. 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.

  2. Kollidierende Namen. Wenn mehrere Tabellen im Query sind, gib immer an, zu welcher Tabelle das Feld gehört. Zum Beispiel students.first_name.

  3. 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.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION