SQL Grundkurs 1: Die Sprache erlernen

Ausdrücke mit Zeichenfolgen

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Es muss nicht immer die Mathematik sein! Auch mit Zeichenfolgen lassen sich sinnvolle Ausdrücke umsetzen. Den Weg dorthin zeigt Ihnen dieses Video.

Transkript

Wie Sie Ausdrücke für Zeichenfolgen verwenden, möchte ich Ihnen in diesem Video zeigen. Unter dem Begriff "Zeichenfolgen" versteht man eigentlich nichts anderes als einen normalen Text, wie einen Nachnamen oder einen Vornamen. Man verwendet auch z.B. den Begriff "Strings" dafür. Das ist ein Begriff, der vom Datentyp her für Character oder für Texte aus dem Programmierbereich eher kommt. All das ist dasselbe. Ich möchte nun ein ganz einfaches Beispiel mit Ihnen realisieren. Dazu greife ich auf die Personaltabelle zu. Wir haben hier z.B. neben der Personalnummer und dem Nachnamen auch den Vornamen und den akademischen Grad gespeichert. Sehen wir uns den einmal an; wir sehen: Nachname, Vorname und akademischen Grad. Ein ganz einfaches Beispiel für eine Zeichenfolge Operation an einem Ausdruck mit Zeichenfolgen wäre es, den Vornamen, Nachnamen sowie den akademischen Grad in einer Spalte zusammenzufassen und außerdem den Nachnamen dabei z.B. in Großbuchstaben darzustellen. Das möchte ich jetzt realisieren. Dazu ergänze ich eine neue berechnete Spalte, in der ich den akademischen Grad verwende. Jetzt möchte ich den Vornamen als Nächstes dranhängen. Der Microsoft SQL Server verwendet zum konkatenieren "konkatenieren" ist der Fachausdruck in SQL für das Zusammenfügen von Texten das kaufmännische "&" ein Symbol, also: Akademischer Grad &, dann ein Leerzeichen und dann der Vorname. Das Leerzeichen ist ein statischer Text und ein statischer Text wird in ANSI SQL unter einfache Hochkommas gesetzt. Sie kennen das vielleicht von Excel, wenn Sie Ausdrücke schreiben, oder von anderen Programmierumgebungen, da werden Texte unter doppelte Hochkommas geschrieben. In ANSI SQL werden hier einfache Hochkommas verwendet. Zur Erinnerung: Doppelte Hochkommas haben in ANSI SQL die Bedeutung, dass sie zum Begrenzen von Namen, die Sonder- und Leerzeichen enthalten können, verwendet werden. Also setze ich hier ein Leerzeichen hinter ein Hochkomma und vor ein schließendes Hochkomma und hänge danach den Vornamen daran. Dann möchte ich wieder ein Leerzeichen, damit Vor- und Nachname nicht aufeinander kleben und danach den Nachnamen, aber in Großbuchstaben. Dafür verwende ich - wie in anderen Systemen auch üblich - eine Funktion, z.B. die Funktion "UPPER". Die wandelt mir den Nachnamen, indem ich ihm den Parameter übergebe, in Großbuchstaben um. Z.B. "Mitarbeiter". Wenn ich hier als Überschrift "Mitarbeiter" und in Klammern "in" verwenden möchte, dann muss ich wieder doppelte Hochkommas verwenden für diesen Aliasnamen. Hier sehen wir jetzt schön den Unterschied zwischen einfachen und doppelten Hochkommas von der Bedeutung her. Ich führe diese Anweisung aus, und jetzt bekommen wir hier den Namen. Allerdings ist jetzt hier noch Folgendes passiert: Wir sehen, dass es welche gibt, die sozusagen in der Versenkung der Anonymität verschwunden sind. Sie werden es erraten; es hängt damit zusammen, dass Sie keinen akademischen Grad haben. Das liegt darin begründet: Diese NULL-Werte NULL-Werte sind ein Sonderfall in relationalen Datenbanken, "NULL" steht ja für "leer", für "nichts" -, wenn die als Teil eines Ausdrucks enthalten sind, wird der gesamte Ausdruck wenn es sich um mathematische Ausdrücke handelt "NULL". Nachdem hier der SQL-Server auch für Zeichenfolgeoperationen das mathematische "+" verwendet, kommt dieses Phänomen auch hier zum Tragen. Deshalb verschwindet hier der Name. Deshalb müssen wir zusätzlich diese NULL-Werte noch unterdrücken. Dafür verwenden wir wieder eine Funktion. Diese hat beim Microsoft SQL Server den Namen "ISNULL". Dafür verwenden wir folgenden Syntax: Diese Funktion hat 2 Parameter, nämlich einen Wert und einen Ersatzwert, wobei der Ersatzwert immer dann verwendet wird, wenn eben dieser Wert "NULL" ist. Der Satzwert muss denselben Datentyp aufweisen, wie der ursprüngliche Wert. Was bedeutet das hier für uns? Das bedeutet in unserem Beispiel, dass wir für den Fall, dass der akademische Grad leer ist - also "NULL" -, diesen durch etwas ersetzen, das uns nicht stört. Das wäre ein sogenannter Leerstring. Leerstring nennt man eine Zeichenfolge, die aus keinem Zeichen besteht. Das ist fast, von der Logik her, nicht viel was anderes als ein NULL-Wert, ist aber doch etwas anderes. Dadurch, dass ich diesen NULL-Wert durch einen Leerstring ersetze, wird er nicht mehr dieses Phänomen hervorrufen, dass der Gesamtausdruck hier verschwindet. Ich führe diese Anweisung aus, und schon sehen wir, dass wir jetzt alle Namen haben. Allerdings ist jetzt eine Kleinigkeit hier noch unsauber, nämlich wir sehen hier, dass alle, die keinen akademischen Grad haben, hier eingerückt sind. Das hängt damit zusammen, dass dieses Leerzeichen immer zwischen akademischen Grad und Vornamen gesetzt wird. Und wenn es eben keinen akademischen Grad gibt, dann wird hier dieser Vorname eingerückt dargestellt. Das schaut natürlich sehr unprofessionell aus. Wie kann ich das jetzt beheben? Hier könnte man natürlich mit einer TRIM-Funktion überschüssige Leerzeichen entfernen. Wesentlich eleganter wäre es allerdings, hier bei Microsoft SQL Server einfach dieses "+ Leerzeichen" mit in die Funktion hinein zu verfrachten, denn dann machen wir uns das Phänomen, das wir vorher nicht wollten, zunutze; nämlich wenn es keinen akademischen Grad gibt, dann wird dieses Leerzeichen von dem NULL-Wert mit geschluckt und erst dann durch einen Leerstring ersetzt. Das führt dazu, dass letztendlich dieser Flattersatz - wie man das auch nennt - verschwindet und alle schön linksbündig ausgerichtet sind. Damit hätten wir jetzt hier eine schöne Zeichenfolgeoperation - ein Ausdruck mit Zeichenfolgen - gesehen. Allerdings enthält diese Lösung Microsoft SQL Server-spezifische Elemente. Daher können wir diese Lösung nicht mit Copy&Paste eins zu eins auf Oracle oder MySQL übernehmen. Was müssen wir bei diesen beiden Systemen berücksichtigen und anders realisieren? Ich kopiere mir die ursprüngliche Variante zu diesem Zweck in die Zwischenablage und wechsle als Erstes zu Oracle und füge hier diesen Text ein. Der entscheidende Unterschied ist, dass Oracle einen anderen Operator für das Zusammenhängen von Texten verwendet, nämlich nicht das mathematische "+", sondern eine doppelte Pipe, das heißt 2 aufeinanderfolgende, senkrechte Striche. Diese finden Sie auf der Tastatur als Drittbelegung bei Größer- und Kleinerzeichen. Diese müssen wir hier jetzt verwenden. Das schaut auf den ersten Blick etwas ungewohnt aus, ist aber hier die korrekte Form. Führen wir nun diese Anweisung aus. Wir erkennen einen weiteren Unterschied: Wir sehen, dass hier, auch wenn kein akademischer Grad vorhanden ist, der Gesamtname nicht verschwindet. Was ist noch anders? Wir sehen hier beim Aliasnamen, dass bei Oracle, wo wir generell immer Großschreibung von Spalten- und Aliasnamen haben, dann die Groß-/Kleinschreibung erhalten bleibt, wenn der Aliasname in doppelte Hochkommas gesetzt wird. Deshalb haben wir hier "mitarbeiter" oder "mitarbeiterin" in Kleinbuchstaben. Entweder könnten wir hier zumindest das "M" in Großbuchstaben oder, wenn Ihnen das besser gefällt, auch den gesamten Aliasnamen in Großbuchstaben umtauschen. Warum ist jetzt hier dieser Name nicht verschwunden, wenn der akademische Grad nicht vorhanden, sprich "NULL" ist? Generell gilt das zuvor Gesagte über NULL-Werte in Ausdrücken auch bei Oracle. Allerdings wird hier das Zusammenfügen von Texten nicht wie ein mathematischer Ausdruck behandelt, denn hier würde das Phänomen auch bei Oracle auftreten, sondern aufgrund dieses Operators wird das Phänomen hier unterdrückt. Was bleibt natürlich, ist jetzt hier dieses Leerzeichen. Es gäbe hier bei Oracle ein Pendant für die ISNULL-Funktion, das wäre die Funktion "NVL". Nur ist sie hier nicht verwendbar, weil ja der NULL-Wert nicht zu unterdrücken gilt. Um also hier überschüssige Leerzeichen zu unterdrücken, müssen wir eine eigene Funktion dafür verwenden, die Funktion "TRIM". Diese Funktion setzt ich jetzt um den gesamten Ausdruck herum und führe die Anweisung aus; und schon haben wir hier jetzt ein sauberes Ergebnis, so wie wir das hier erwartet haben. Der Vollständigkeit halber hier noch das Pendant zur ISNULL-Funktion. Wie schon erwähnt, können wir NULL-Werte auch bei Oracle haben und unterdrücken müssen. Das macht man mit der Funktion "NVL". "NVL" steht kurz für "NULL VALUE", die denselben Aufbau hat wie die ISNULL-Funktion, nämlich als Parameterwert und den Ersatzwert. Z.B. mit "SELECT NVL" von "NULL", Ersatzwert "leer", "FROM dual" können wir das hier austesten und dann bekommen wir eben "leer". Nun aber zurück zu unserem Zeichenfolgeausdruck. Betrachten wir uns nun dasselbe noch in MySQL, denn auch hier gibt es wieder Unterschiede. Einer der Unterschiede ist es, dass hier bei MySQL der Operator in der Doppel-Pipe eine andere Bedeutung hat. Der kann hier nicht verwendet werden. Auch das kaufmännische "&" kann nicht zum Einsatz kommen. Um hier also mehrere Texte zusammenzuhängen, müssen wir eine eigene Funktion, nämlich die Funktion "CONCAT", verwenden. Hier werden beliebig viele Zeichenfolgen als einzelne Parameter übergeben. Die Anzahl ist hier beliebig, das heißt, so viele Teile wie ich habe, kann ich hier angeben. Auf diese Art und Weise - Sie sehen es hier immer mit Komma getrennt - ergänze ich hier die einzelnen Elemente, das heißt den akademischen Grad, ein Leerzeichen, den Vornamen, wieder ein Leerzeichen und Nachname in Großbuchstaben. Nun führe ich diese Anweisung aus. Was wir im Ergebnis sehen, ist, dass es prinzipiell wieder funktioniert. Auch die UPPER-Funktion hat die gleiche Syntax wie bei den anderen beiden Systemen. Allerdings haben wir hier wieder die NULL-Werte bei den Mitarbeiterinnen und Mitarbeitern, die keinen akademischen Grad aufweisen. Daher müssen wir jetzt hier den akademischen Grad wieder mittels einer Funktion zu einem gültigen Wert machen. Das Pendant dazu zu "ISNULL" und "NVL" bei MySQL heißt "IFNULL". Auch die hat wieder die gleiche Syntax. Sie hat einen Wert und einen Ersatzwert, der zu tragen kommt, wenn es eben NULL-Werte gibt. Ich kopiere mir hier die bisherige Form und verwende jetzt die Funktion "IFNULL", um den akademischen Grad wiederum durch einen Leerstring innerhalb dieser Funktion zu ersetzen. Ich führe das Ergebnis aus und schon haben wir hier die Namen allerdings wieder mit dem führenden Leerzeichen. Jetzt gibt es 2 Möglichkeiten, wie wir dieses Leerzeichen hier wegbekommen. Entweder verwenden wir wieder die TRIM-Funktion, um es am Ende zu eliminieren, oder eine andere Möglichkeit wäre, ein ähnliches Phänomen zu nutzen wie vorhin, indem wir den akademischen Grad schon innerhalb der IFNULL-Funktion mit dem Leerzeichen verbinden. Allerdings müssen wir hier wieder die CONCAT-Funktion nehmen und das Ganze schachteln, um hier das Leerzeichen als einzelnen Parameter noch zu übergeben. Wir sehen: Wir müssen hier schon sehr gut aufpassen wie wir vorgehen, da wir geschachtelte Funktionen haben mit den Klammern, mit den Kommas etc., dass wir hier nicht in einen Syntaxfehler hineinlaufen. Dieses Leerzeichen danach entferne ich, denn das habe ich hier in diesem Teilausdruck schon eingebracht. Jetzt habe ich natürlich die Situation, dass das Leerzeichen hier zuerst mit dem akademischen Grad ergänzt wird; und wenn der akademische Grad "NULL" ist, wird das Leerzeichen mit in den Hintergrund gedrängt. Jetzt führe ich diese Anweisung aus. Wir haben jetzt dasselbe Ergebnis wie bei den anderen beiden Systemen, nämlich dass wir sauber diese 3 Spalten zu einer zusammengefügt haben. Außerdem haben wir hier NULL-Werte unterdrückt und überschüssige Leerzeichen am Beginn des Ausdrucks verhindert. Wenn Ihnen die Variante mit dem "CONCAT" und dem Schachteln des "CONCATS" unter MySQL zu aufwendig ist und zu unübersichtlich, können Sie natürlich auch an Stelle dieser Lösung - analog wie bei Oracle - einfach eine TRIM-Funktion verwenden und um den ganzen Ausdruck herumsetzen. Die 3 wichtigsten Unterscheide zwischen den 3 Datenbankmanagementsystemen, die wir hier verwenden, ist  zusammenfassend der, dass wir bei einem Microsoft SQL Server Texte mittels kaufmännischem "&" verketten und NULL-Werte mit der Funktion "ISNULL" unterdrücken. Bei Oracle verwenden wir zum Zusammenhängen der Zeichenfolgen eine doppelte Pipe und die NVL-Funktion, um NULL-Werte zu unterdrücken. Last but not least: MySQL. Hier werden Texte nur über die Funktion "CONCAT" zusammengefügt. Das Pendant für "ISNULL" und "NVL" wäre hier die Funktion "IFNULL".

SQL Grundkurs 1: Die Sprache erlernen

Arbeiten Sie sich in die Grundlagen der Datenbanksprache SQL am Beispiel von Microsoft SQL Server, Oracle und MySQL ein und lassen Sie sich die praktische Nutzung erklären.

14 Std. 40 min (112 Videos)
Derzeit sind keine Feedbacks vorhanden...

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!