SQL Schnellstart – Wildcards

Bisher haben wir bei den meisten unserer SQL SELECT-Abfragen mit WHERE einfach mit dem Gleichheitszeichen auf einen bestimmten Wert gefiltert, aber wie können wir auf eine Art Muster filtern? Zum Beispiel wollen wir alle Schüler aus einer Klassenliste, welche den Buchstabe 'a' in ihrem Namen haben. Genau das kann man mit SQL Wildcards machen! In diesem Artikel erfährst du, wie du Wildcards in SQL anwenden kannst.

Definition: Was sind SQL Wildcards?

Wildcards werden in SQL dazu verwendet, einen oder mehrere Zeichen eines Textes zu substituieren, also um ein bestimmtes Muster zu bilden. Wildcards selber sind spezielle Symbole in SQL, die du als Ersatz für ein bestimmtes Muster in einem Text verwenden kannst. Um Wildcards zu verwenden, gibt es in SQL den LIKE-Operator.

Welche Wildcards gibt es?

Je nach Datenbankmanagementsystem können sich die Symbole unterscheiden. Nachfolgend ist eine Liste mit Wildcards, welche von SQLite unterstützt werden:

Symbol Beschreibung Beispiel
% Steht stellvertretend für keinen, einen oder mehrere beliebige Zeichen Bl%u steht also für Blu, Blau, Blaau, Blabbbbbbu, Bluuu und so weiter
_ Steht stellvertretend für genau ein Zeichen Bl_u steht also für Blau, Blbu, blcu, bl3u und so weiter
[] Steht für genau ein Zeichen innerhalb der Klammern Bl[abc]u steht also für Blau, Blbu, Blcu
^ Steht für genau ein Zeichen, welches nicht in der Klammer ist Bl[^abc]u steht also für Bldu, Bleu, Bl4u und so weiter, aber nicht (Blau, Blbu und Blcu)
- Steht für eine Reihe von Zeichen Bl[a-d]u steht also für Blau, Blbu, Blcu und Bldu

Du kannst auch mehrere Wildcards gleichzeitig verwenden.

Wildcards-Beispiel

Kommen wir noch mal zu unserer Klassenliste zurück. Die Schüler der Klasse 10A werden in einer Tabelle "Schueler10A" gespeichert. Sieh dir die Daten an:

Wir wollen nun die Daten aller Schüler, welche ein 'a' in ihrem Namen haben. Wie zuvor erwähnt können wir Wildcards mit dem LIKE-Operator verwenden:

SELECT *
FROM Schueler10A
WHERE Vorname LIKE '%a%';

Hinweis: SQL ist hierbei nicht Case-sensitive. Das bedeutet du könntest auch '%A%' schreiben und würdest dasselbe Ergebnis erhalten.

Code-Aufgabe: Alle Schüler, die keine '1' in ihrem Geburtsdatum haben.

Jetzt bist du an der Reihe! Entwickle eine SQL-Abfrage, die alle Schüler ausgibt, welche nicht die Ziffer '1' in ihrem Geburtsdatum haben. Eine mögliche Lösung findest du unten.

Hinweis: Da sich die unterstützen Wildcards der Datenbankmanagementsysteme stark unterscheiden, werden nicht alle genannten Wildcards in unserer Datenbank unten unterstützt. Unterstützt wird aber das '%'-Wildcard. Dieses kannst du für deine Lösung verwenden. Ziehe auch eine mögliche Verwendung von vorherigen Elementen wie NOT, AND, OR in Betracht.

[lp_spoiler title="Lösung anzeigen"]

Lösung:

SELECT *
FROM Schueler10A
WHERE Geburtsdatum NOT LIKE '%1%';

In anderen Datenbankmanagementsystem sind aber auch Lösungen wie diese hier möglich:

SELECT *
FROM Schueler10A
WHERE Geburtsdatum LIKE '[^1][^1][^1][^1]-[^1][^1]-[^1][^1]';

[/lp_spoiler]

Fazit

Mit Wildcards und dem LIKE-Operator kennst du nun eine einfache Möglichkeit, deine Suche noch weiter zu verfeinern. Verwendest du Wildcards, solltest du vorher nachschauen, welche Wildcards dein Datenbankmanagementsystem unterstützt.