Modul Datenbanken IN EF Gymnasium Lerbermatt
Docs » sql:basics

Erste Schritte mit SELECT

Für die restlichen Aufgaben in diesem Tutorial verwenden Sie jeweils den sog. SQL-Editor, wie er in den vorherigen Kapiteln erklärt wurde.

Syntax von SELECT

SELECT * | Attribut [, Attribut] FROM Tabellenname;

Im Zusammenhang mit der SELECT-Anweisung spricht man häufig auch davon, "eine Abfrage zu erstellen" (englisch "query").

Wenn ich also schreibe, Sie sollen eine Abfrage erstellen, welche alle Kunden aus der Schweiz liefert, werden Sie dies mit der SELECT-Anweisung erledigen.

Die SELECT-Anweisung ist einerseits die einfachste, aber in ihrer vollen Ausbaustufe auch die komplexeste resp. komplizierteste Anweisung in SQL. Aber keine Sorge, so schwierig wird es dann doch nicht😉.

Die einfachste Version haben Sie bereits kennengelernt, und zwar der folgende konkrete Befehl:

SELECT * FROM tblKunden;

Das abschliessende Semikolon ist bei SQLite optional. Bei anderen Datenbanksystemen ist es teilweise zwingend.

Aufgabe 1

Geben Sie gleich diesen Befehl in einem neuen SQL-Editor Fenster von SQLiteStudio ein.

Wie viele Datensätze erhalten Sie?

Lösung

Sie sollten 91 Datensätze erhalten, in diesem Fall also 91 Kund*innen. Das sind gleich viele, wie wenn Sie die Tabelle "tblKunden" in der Daten-Ansicht ansehen würden.

GROSS- und kleinschreibung

Viele SQL-Dialekte unterscheiden nicht zwischen Gross- und Kleinschreibung. Die folgenden Befehle sind also jeweils identisch:

  • SELECT * FROM tblKunden;
  • select * from tblkunden;
  • seLEct * FRom tblKunDEN;

Auch wenn wir später nach Texten filtern, beispielsweise nur diejenigen Personen anzeigen wollen, welche im Nachname mit "A" beginnen, dann ist es egal, ob Sie ein grosses A oder ein kleines a schreiben; zumindest bei SQLite, SQL-Server oder MYSQL. PostgreSQL hingegen unterscheidet Gross- und Kleinschreibung

Das Sternchen

Das Sternchen bedeutet nicht "alle Datensätze", sondern "alle Spalten".

Statt immer alle Spalten darzustellen, können wir angeben, welche Spalten wir gerne hätten:

SELECT tNachname FROM tblKunden;

Selbstverständlich können auch mehrere Spalten angegeben werden:

SELECT tVorname, tPLZ, tNachname FROM tblKunden;

Das gibt die angegebenen Spalten zurück:

Hinweis: diese drei Spalten so zurückgeben, macht nicht wirklich Sinn…

Aufgabe 2

Schreiben Sie einen SQL-Befehl, mit welchem Sie die Spalten tOrt, tPLZ, tFirmenname und tAdresse in dieser Reihenfolge zurückgibt.

Lösung

Der SQL-Befehl sollte wie folgt aussehen:

SELECT tOrt, tPLZ, tFirmenname, tAdresse FROM tblKunden;

Sie sehen, die Reihenfolge der Attribute (Spalten) muss nicht zwingend der Tabellenstruktur entsprechen.

Spalten umbenennen (Alias)

Attribute in Tabellen folgen sinnvollerweise einer bestimmten Namenskonvention. In der Topfood-Datenbank weisen alle Attribute als Präfix den Kleinbuchstaben "t" auf. Das macht dann Sinn, wenn beispielsweise berechnete Felder in einer Abfrage (in SQLite "View" genannt) vorkommen. Diese kriegen statt ein "t" ein "q" als Präfix. So weiss man, welche Felder einer Abfrage aus Tabellen stammen und welche neu erstellt wurden.

Das kleine "t" ist beispielsweise für einen Export nach Excel nicht sonderlich schön. Deshalb kann bei der Ausgabe der Abfrage jede Spalte (resp. die gewünschte) umbenannt werden.

Das sieht so aus:

SELECT tFirmenname AS Firma, tNachname AS Nachname, tVorname AS Vorname FROM tblKunden;

Wenn Sie eine Spalte umbenennen, sagt man auch, dass Sie der Spalte (dem Attribut) einen Alias zuweisen.

"Nachname" ist also ein Alias für das Attribut "tNachname".

In der Regel werden Spaltenbezeichnungen nicht umbenannt. Sie können sich in der Praxis den Aufwand sparen. Es kann aber mal vorkommen, dass Sie aus einem Abfrageergebnis eine CSV-Datei exportieren wollen. Da kann es unter Umständen Sinn machen, die Spaltenbezeichnungen "zu verschönern".

Achtung, Sie können mehrere Spalten sogar identisch benennen. Das macht aber wenig Sinn. Zudem hängt das DBMS dann noch eine Zahl als Suffix an, damit die Attribute nicht identisch heissen:

Aufgabe 3

Geben Sie die Spalten tKundenID, tTelefon und tFax zurück. Passen Sie die Spalten wie folgt an:

  • Kunden-Nummer
  • Telefon
  • Telefax

Lösung

Sobald Leerschläge oder Sonderzeichen in der umbenannten Spaltenbezeichnung vorkommen, müssen Sie diese in Anführungszeichen setzen. Sie können sicherheitshalber auch sämtliche umbenannten Spalten in Anführungszeichen setzen.

So sieht eine mögliche Lösung aus:

SELECT tKundenID AS "Kunden-Nummer", tTelefon AS "Telefon", tFax AS "Telefax" FROM tblKunden;

Spalten konkatenieren

Es kann vorkommen, dass Sie z.B. zwei Spalten zusammenfassen wollen. Das kann beispielsweise dann der Fall sein, wenn Sie eine einzige Spalte für den Vor- und Nachnamen haben möchten, aber auch für die Postleitzahl und den Ort.

Das könnte als Resultat wie folgt aussehen:

Der SQL-Befehl dazu lautet:

SELECT tVorname || " " || tNachname, tPLZ || " " || tOrt FROM tblKunden;

Mit dem Concatenate-Operator || werden Spalten und Textteile "zusammengebaut". Im obigen Beispiel werden somit tVorname mit einem Leerschlag und mit tNachname zu einem einzigen Feld konkateniert:

tVorname || " " || tNachname

Aufgaben

Aufgabe 4

Sie sehen beim Ausführen der Abfrage, dass die Spaltenbezeichnungen nicht sonderlich schön aussehen:

Sorgen Sie dafür, dass die beiden Spalten stattdessen wie folgt benannt werden:

Lösung

Spalten kontatenieren ist eine coole Sache. Aber in den meisten Fällen benennen Sie dann die Spalten gleich um. Dabei müssen Sie lediglich noch den AS-Operator dazu nehmen:

SELECT tVorname || " " || tNachname AS Fullname, tPLZ || " " || tOrt AS Place FROM tblKunden;

Aufgabe 5

Passen Sie die Abfrage so an, dass die Spalten nun wie folgt beschriftet werden:

Lösung

SELECT tVorname || " " || tNachname AS "Ganzer Name", tPLZ || " " || tOrt AS "Postleitzahl / Ort" FROM tblKunden;

Warnung bezüglich zusammengefassten Spalten

Obiges Abfrageergebnis kann beispielsweise als Ausgangsliste für einen Seriendruck in Word sinnvoll sein. Und zwar deshalb, weil man so in Word dieses "Zusammmenbauen" von Teilen der Adresse nicht mehr machen muss, sondern die Daten schon fixfertig geliefert werden.

Beachten Sie aber, dass Sie diese Liste beispielsweise nachträglich in Excel nicht mehr nach Nachname oder nach Ort sortieren können.

Aus diesem Grund kann es durchaus Sinn machen, die einzelnen Spalten ebenfalls im Abfrageergebnis anzuzeigen. Hier sehen Sie ein Beispiel:

Ein solches Abfrageergebnis, exportiert z.B. in eine CSV-Datei, kann ich nun in Word als Seriendruck-Quelle verwenden.

  • Erstens kann ich nach Belieben nach den einzelnen Spalten sortieren
  • Zweitens habe ich aber fixfertig die Zeile für den Namen und die Zeile für PLZ und Ort vorhanden, und muss diese nicht von Hand zusammenbauen

Eine solche Abfrage ist der beste Service, den wir unseren Kolleg*innen im Sekretariat bieten können, damit sie Serienbriefe erstellen können:

  • Er enthält weiterhin die Spalten "Vorname" und "Nachname", um die Liste vernünftig sortieren zu können
  • Zudem bieten wir ein Attribut "Vorname Nachname" an, welches direkt so auf dem Brief ausgegeben werden kann
  • Und die letzte Spalte mit Land, PLZ und Ort ist sowieso perfekt; dies in Word umzusetzen, ist nur mühsam
Previous Next

Modul Datenbanken IN EF Gymnasium Lerbermatt

Table of Contents

Inhaltsverzeichnis

  • Erste Schritte mit SELECT
    • Syntax von SELECT
      • Aufgabe 1
    • GROSS- und kleinschreibung
    • Das Sternchen
      • Aufgabe 2
  • Spalten umbenennen (Alias)
    • Aufgabe 3
  • Spalten konkatenieren
    • Aufgaben
    • Warnung bezüglich zusammengefassten Spalten

Theorie

  • Grundlagen zu Datenbanken
  • Datenbank-Modelle
  • Relationale Datenbanken
  • Die Abfragesprache SQL

Installation von Software

  • Demo-Datenbank herunterladen
  • SQLite installieren
  • SQLiteStudio verwenden
  • DB Browser for SQLite verwenden

Einführung in SQL

  • Erste Schritte mit SELECT
  • ORDER BY
  • LIMIT
  • WHERE
  • GROUP BY und Aggregation
  • Weitere Berechnungen
  • SELECT vollständig

Über mehrere Tabelle abfragen

  • Was ist ein JOIN?
  • JOIN mit zwei Tabellen
  • JOIN mit drei Tabellen
  • Noch mehr JOINs 😂
  • Noch ein paar Übungen