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