Text verbinden
Manchmal willst du mehrere Werte in einem Text haben: den Titel eines Spiels mit seinem Genre, den Namen eines Kunden mit seiner E-Mail-Adresse. Der Operator ||, zwei senkrechte Striche, verbindet Texte:
SELECT titel || ' (' || genre || ')'
FROM spiele;| titel || ' (' || genre || ')' |
|---|
| Dragon Forge (RPG) |
| Pixel Racer (Rennspiel) |
| Moon Farm (Simulation) |
| … |
' (' und ')' sind Texte, die direkt in der Abfrage stehen. In SQL steht Text immer zwischen einfachen Anführungszeichen (Apostrophen): 'Hallo', ' ('. Die Anführungszeichen gehören nicht zum Text. Sie zeigen nur, wo er beginnt und wo er endet, und alles dazwischen bleibt genau, wie es ist, auch Leerzeichen und Großbuchstaben. Ohne die Anführungszeichen würde SQLite ein Wort für den Namen einer Spalte halten. Zahlen schreibt man ohne Anführungszeichen: 5, 0.8.
Typischer Fehler: der Name einer Spalte in Anführungszeichen. 'stadt' ist nicht die Spalte stadt, sondern der Text „stadt“, also zeigt SELECT name, 'stadt' FROM kunden; in jeder Zeile das Wort stadt. Und doppelte Anführungszeichen sind für Namen da, wie der Alias "neuer preis" in der vorigen Übung, nicht für Text. SQLite verzeiht Text in doppelten Anführungszeichen manchmal, aber nur, wenn keine Spalte diesen Namen hat: "stadt" ist weiterhin die Spalte. Andere Datenbanken verzeihen es überhaupt nicht.
|| verbindet auch Zahlen, als Text: titel || ': ' || preis || ' €' ergibt Dragon Forge: 40 €. Vorsicht bei Rechnungen: || geht vor * und -, also verbindet titel || ': ' || preis * 2 zuerst die Texte und multipliziert dann den ganzen Text mit 2, was keinen Sinn ergibt (das Ergebnis ist 0). Setze die Rechnung in Klammern: titel || ': ' || (preis * 2).
Wenn einer der verbundenen Werte NULL ist, ist das ganze Ergebnis NULL. Anna Fischer hat keine Stadt, also ergibt diese Abfrage für sie NULL und nicht „Anna Fischer aus“:
SELECT name || ' aus ' || stadt AS kunde
FROM kunden;| kunde |
|---|
| Emma Becker aus Hamburg |
| Lukas Neumann aus Leipzig |
| Olivia Braun aus Hamburg |
| Noah Winter aus Dresden |
| NULL |
| … |
Wie du anstelle von NULL einen anderen Wert einsetzt, lernst du in der Lektion über Funktionen. Und wie du siehst, bekommt eine verbundene Spalte meist einen Alias; die Rechnung selbst würde einen langen Namen ergeben. Noch eine Anmerkung: || funktioniert in SQLite, PostgreSQL und Oracle, während MySQL und SQL Server Texte mit der Funktion CONCAT() verbinden.
So schreibst du es:
Anweisungen
- 1
Zeige die Kontakte der Kunden in der Form, die E-Mail verwendet: eine Spalte namens
kontaktmit dem Namen, einem Leerzeichen und der E-Mail-Adresse in spitzen Klammern, wieAnna Fischer <anna.fischer@mail.de>. Sortiere sie nach dem Namen:kontakt Anna Fischer <anna.fischer@mail.de> Emma Becker <emma.becker@mail.de> Greta Hoffmann <greta.hoffmann@mail.de> … - 2
Bereite darunter die Texte für ein Aktionsbanner vor, wie
Knight's Oath: jetzt 55 €, mit dem Titel und dem um 5 € niedrigeren Preis. Zeige sie in einer Spalte namensangebot, sortiert nach dem Preis, vom teuersten:angebot Knight's Oath: jetzt 55 € Goal Rush: jetzt 45 € Ice Hockey Pro: jetzt 40 € …