SQL Grundkurs 2: Aufgaben und Lösungen

Beispiel 5: Ausdrücke mit Zeichenfolgen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Der Nachname Ihrer Kunden soll dem Vornamen mit einem Komma getrennt vorangestellt werden. Verwenden Sie dazu eine Spalte mit dem Aliasnamen "kunde/kundin". Außerdem sollen noch Spalten für die Initialen, die Adresse und den Skonto hinzugefügt werden.

Transkript

Ziel dieses Beispiels ist es, den Einsatz von Zeichenfolge-Funktionen zu üben, dazu wollen wir die Tabelle kunden verwenden. In einem ersten Berechnungsausdruck, in der ersten Spalte, wollen wir den Nachnamen und danach mit Komma getrennt, den Vornamen anzeigen. Als Aliasnamen möchten wir kunde/kundin, also sauber gegendert die Überschrift, verwenden. In einer zweiten Spalte möchten wir die Initialen unserer Kunden darstellen, GB für Gerald Bogner, PD für Petra Deutschmann und so weiter. Die dritte Spalte soll die gesamte Adresse anzeigen. Die Adresse besteht einerseits aus der Spalte strasse, gefolgt von der Spalte land, das ist das Länderkürzel, danach mit einem Bindestrich der Inhalt der Spalte Postleitzahl (plz) und ganz am Ende die Spalte ort, dieser Spalte vergeben Sie den Aliasnamen adresse. Und abschließend soll noch eine Spalte skonto dargestellt werden. Den Skontoprozentsatz finden wir in der Spalte skonto, die hat hier den Datentyp decimal beim Microsoft SQL Server, und dahinter soll noch ein Prozentzeichen ergänzt werden. Einen Tipp noch, achten Sie hier darauf, dass das Skonto zuerst in einen Charakterdatentyp konvertiert werden muss, damit Sie beim Microsoft SQL Server, das Zusammenhängen dieser zwei Werte umsetzen können, sonst würden Sie nämlich in einen Fehler laufen. Sortieren Sie das Ergebnis absteigend noch, nach dem Nachnamen aufsteigend. Pausieren Sie nun das Video und lösen Sie die Aufgabe. Wenn Sie damit fertig sind, fahren Sie mit dem Video fort und sehen Sie sich meine Musterlösung an. Fangen wir in der Betrachtung der Lösungen mit dem Microsoft SQL Server an. Ich führe diese Anweisung aus, aber ich stoße jetzt hier auf einen Fehler. Ich nehme es gleich vorweg, das ist der Tipp, den ich Ihnen zur Umsetzung gegeben habe, wenn ich bei Microsoft SQL Server mit einem Plus einen Text und eine Zahl zusammenhänge, dann werden nicht die zwei Texte konkateniert, also zusammengehängt, sondern es gibt einen Fehler, weil Skonto eben ein numerischer Datentyp ist. numeric und decimal, so wie es hier in der Fehlermeldung steht, das ist dasselbe, da dürfen Sie sich nicht hier irritieren lassen. Also, numeric plus ein Character ergibt einen Fehler, weil das System implizit versucht den nachfolgenden Wert, also das Prozentzeichen, auch in einen numeric umzuwandeln, und das funktioniert nicht. Deshalb, gleich vorweg, werden wir hier mit der CAST oder CONVERT-Funktion arbeiten müssen. Gehen wir jetzt weiter zum korrekten Ergebnis. Ich führe die Anweisung einmal aus, und jetzt sehen wir uns das zeilenweise durch. Die erste Spalte bekommen wir mit diesem Teilausdruck, nachname + [und dann unter Hochkomma den fixen Text hier, in dem Fall ein Komma und ein Leerzeichen] ', ' + [den Inhalt der Spalte] vorname, wir wollen den Aliasnamen AS "kunde/kundin" vergeben, und nachdem der Schrägstrich hier ein Sonderzeichen darstellt, muss ein ANSI SQL unter doppelte Hochkomma gesetzt werden, AS "kunde/kundin" liefert uns diese Spalte. Im zweiten Schritt möchten wir nun die Initialen ausgeben. Dazu verwende ich hier beim Microsoft SQL Server die Funktion LEFT. LEFT(vorname, 1) liefert das erste Zeichen des Vornamens, + direkt danach, mit: LEFT(nachname, 1), dasselbe vom Nachnamen. AS initialen liefert den Aliasnamen. In ähnlicher Form geht es weiter. Die Adresse bekommen wir mit dem Inhalt der Spalte strasse, + [fix einem Komma und einem Leerzeichen] ', ' + [dem Inhalt der Spalte] + [dem Fixtext in Form eines Bindestrichs] '-' - das ist hier jetzt - + [Postleitzahl] plz, + [ein Leerzeichen wieder] ' ' [unter einfachem Hochkomma,] [und abschließend] ort, AS adresse liefert den Aliasnamen. Wie erwähnt, müssen wir den Inhalt der Spalte skonto zuerst in einen character, in einen Text umwandeln. Das können wir zum Beispiel mit der CAST Funktion erledigen. CAST(skonto [der Name der Spalte] AS varchar), wandelt es in einen Text um. Danach können wir + '%' hier problemlos ergänzen, AS skonto ist wieder der Aliasname. Damit wir das Ganze nach dem Nachnamen sortieren, ergänzen wir noch die ORDER BY Klausel, SELECT gefolgt von den Ausdrücken, FROM wawi.kunden und dann ORDER BY nachname; Ich führe die Anweisung noch einmal aus, und wir sehen, das ist das Ergebnis, so wie wir es erzielen wollten. Betrachten wir nun die Unterschiede bei den anderen Datenbankmanagementsystemen. Ich setze hier vorerst einmal mit MySQL fort. Hier sehen wir nun gleich die Lösung und ich führe die Anweisung gleich einmal aus. Das Ergebnis ist identisch mit dem vom Microsoft SQL Server. Was ist hier anders? Zusammenfügen von Texten passiert unter MySQL nicht mit dem Pluszeichen, sondern mit der CONCAT-Funktion. Die CONCAT-Funktion kann beliebig viele Parameter bekommen, jeder Parameter steht für einen Textwert, der zusammengefügt werden soll. Im ersten Schritt wollen wir die drei Dinge, nachname, dann ein Komma und ein Leerzeichen, und danach einen vornamen, zusammenhängen. Deshalb werden diese drei als Parameter an die CONCAT- Funktion übergeben, die Vergabe des Aliasnamen bleibt hier gleich. Auch die Initialen werden auf ähnliche Weise bestimmt, wieder mit der Funktion LEFT, von vorname das erste (1) Zeichen, und LEFT von nachname 1, das erste Zeichen, mit der CONCAT-Funktion zusammengehängt, liefert die initialen. Das Ganze wiederholt sich auch nun bei der dritten Spalte, wo wir strasse, das Komma, land, den Bindestrich, Postleitzahl, ein Leerzeichen und den ort, zusammenhängen. Alle Parameter werden hier übergeben. Es kann sich also beliebig oft wiederholen, die Eingabe eines Parameters, das ist jetzt hier nicht limitiert. Und zum Abschluss hier noch skonto und %. Hier sehen wir auch eine Besonderheit der CONCAT-Funktion. Die CONCAT-Funktion dient ja ausschließlich dazu, um character zusammenzuhängen, daher weiß sie auch, dass man hier character, also Texte benötigt und wandelt automatisch das skonto in einen Text um - skonto hat hier jetzt auch einen numerischen Datentyp, wenn wir hier hineinschauen, decimal(3,1), dasselbe, wie wir es beim Microsoft SQL Server hatten. Aber, automatisch wird vom System hier, wir könnten sonst auch die CAST-Funktion verwenden, müssen wir aber nicht, die Konvertierung in den Text vorgenommen. Und deshalb können wir uns das hier sparen, und wenn wir die Anweisung ausführen, bekommen wir hier schon das korrekte Ergebnis, und auch diese Spalte ist, wie wir Sie haben wollten. Zum Abschluss wechsele ich nun noch zu Oracle, auch hier haben wir eine etwas unterschiedliche Lösung, der Grund ist hier, weil wir wieder einen eigenen Operator für das Zusammenfügen von Texten, für das Konkatenieren von Texten, benötigen. Oracle verwendet ja die doppelte Pipe dazu. Eines nehme ich vorweg, auch hier müssen wir skonto nicht in einen Text umwandeln, auch das passiert beim Einsatz der doppelten Pipe automatisch, deshalb bekommen wir keinen Fehler, wenn wir das nicht tun. Skonto ist allerdings auch hier, zur Information, mit einem numerischen Datentyp definiert, ich klicke hier mal doppelt drauf, damit wir uns das anschauen können, auch hier SKONTO NUMBER(3,1), das heißt, das ist auf die gleiche Art und Weise hier definiert, wie wir es schon bei den zwei anderen gesehen haben. Ansonsten gleicht eigentlich das Beispiel ziemlich den vorigen Varianten, ich verwende hier statt dem Plus die doppelte Pipe, und natürlich auch hier die doppelten Hochkommas, da der Aliasnamen ein Sonderzeichen in Form des Schrägstrichs enthält. Eine Besonderheit ist hier bei Oracle, das es die Funktion LEFT nicht gibt. Oracle ist ja sehr sparsam bei Funktionen, alles was man auch anders abbilden kann fehlt, und deshalb fehlt bei Oracle die LEFT-Funktion. Die Funktion SUBSTRING - SUBSTR hier abgekürzt, die es ja auch bei den anderen gibt, wird hier dazu verwendet. SUBSTRING arbeitet ja auch von links nach rechts, nämlich - der erste Parameter - wovon will ich einen Teil herausholen, dann ab welcher Position und wie viele Zeichen. Und wenn ich mit SUBSTRING also einen Text heraushole, und als Startposition das erste Zeichen angebe, und dann die Anzahl der Zeichen gleicht ja in der Wirkung der Funktion LEFT, und deshalb muss ich das bei Oracle so machen, da es möglich ist, gibt es bei Oracle die LEFT-Funktion gar nicht. Und sonst, haben wir keine Unterschiede mehr zu den anderen Systemen. Ich führe auch diese Anweisung noch einmal aus, damit wir sehen, dass wirklich dieses Ergebnis von dieser Anweisung erzeugt wird. Sie haben also gesehen in diesem Beispiel, dass Sie bei Oracle mit der doppelten Pipe, unter MySQL mit der Funktion CONCAT, und beim Microsoft SQL Server mit dem Plus, mehrere Texte zusammenhängen können. Mit Zeichenfolge-Funktionen, wie zum Beispiel LEFT, oder SUBSTRING, können Sie Elemente aus einem Text herausholen. Wenn Sie statische Texte in Ausdrücken verwenden wollen, müssen Sie diese unter einfache Hochkommas setzen. Beim Microsoft SQL Server müssen Sie andere Datentypen zuerst in einen Text umwandeln, bevor Sie mit Texten verketten können. Wenn Sie Aliasnamen mit Sonderzeichen verwenden, vergessen Sie nicht auch die doppelten Hochkommas.

SQL Grundkurs 2: Aufgaben und Lösungen

Vertiefen Sie Ihre SQL-Kenntnisse. In diesem Workshop erhalten Sie zahlreiche Beispielaufgaben, die Sie selbst lösen können. Anschließend zeigt Ihnen der Trainer die Lösung.

7 Std. 41 min (61 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieses Training setzt SQL-Kenntnisse voraus, wie sie beispielsweise in „SQL lernen und anwenden“ vermittelt werden.

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!