LIKE-Operator
Der LIKE-Operator wird in Bedingungen verwendet, wenn du prüfen möchtest, ob ein String einem bestimmten Muster entspricht.
Angenommen, wir haben eine Tabelle Users mit dem Feld email:
MySQL 8.4SELECT name, email FROM Users;
Nehmen wir an, wir möchten alle Nutzer finden, deren Mail-Adresse zur Second-Level-Domain „hotmail“ gehört. Konkret sollen also nur die Datensätze ausgewählt werden, die folgender Bedingung entsprechen:
- nach dem Zeichen „@“ folgt „hotmail“
- nach „hotmail“ folgt das Zeichen „.“ und danach eine beliebige Zeichenfolge
Für solche nicht-trivialen Suchen in Stringfeldern brauchst du den LIKE-Operator.
Syntax
WHERE tabellen_feld [NOT] LIKE muster_string- [ ]optionaler Teil
- tabellen_feld
Die Textspalte, deren Werte mit dem Muster verglichen werden.
- NOT
Kehrt die Bedingung um: Es bleiben die Zeilen, die nicht zum Muster passen.
SchlüsselwortOptional- muster_string
Ein String in Anführungszeichen, dem der Wert ähneln soll, zum Beispiel '%@hotmail.%'.
Das Muster kann zwei Sonderzeichen enthalten — % und _. Das bedeutet jeweils:
So kann unsere Query, die Nutzer der Domain „hotmail“ findet, etwa so aussehen:
MySQL 8.4SELECT name, email FROM Users WHERE email LIKE '%@hotmail.%'
Beispiele
-
MySQL 8.4
... WHERE tabellen_feld LIKE 'text%'Passt auf alle Strings, die mit „text“ beginnen.
-
MySQL 8.4
... WHERE tabellen_feld LIKE '%text'Passt auf alle Strings, die auf „text“ enden.
-
MySQL 8.4
... WHERE tabellen_feld LIKE '_ext'Passt auf Strings der Länge 4, deren letzte drei Zeichen „ext“ sein müssen. Zum Beispiel „text“ und „next“.
-
MySQL 8.4
... WHERE tabellen_feld LIKE 'begin%end'Passt auf Strings, die mit „begin“ beginnen und mit „end“ enden.
Sonderzeichen escapen
Manchmal willst du Strings finden, in denen % oder _ Teil des eigentlichen Textes sind und nicht Bestandteil des Musters. In solchen Fällen musst du diese Zeichen escapen.
In LIKE-Mustern wird standardmäßig der Backslash \ zum Escapen verwendet. Wenn du etwa die IDs der Tasks finden willst, deren Fortschritt genau 3% beträgt, kannst du das so schreiben:
MySQL 8.4SELECT job_id FROM Jobs WHERE progress LIKE '3\%';
ESCAPE-Zeichen
Wenn du statt des Standardzeichens ein anderes Escape-Zeichen verwenden möchtest, kannst du es mit ESCAPE explizit angeben.
Syntax mit ESCAPE
WHERE tabellen_feld LIKE muster_string ESCAPE escape_zeichen- tabellen_feld
Die Textspalte, deren Werte mit dem Muster verglichen werden.
- muster_string
Das Suchmuster. Das Escape-Zeichen vor % oder _ macht sie zu gewöhnlichen Zeichen.
- escape_zeichen
Ein einzelnes Zeichen, das in diesem Muster statt \ die Zeichen % und _ escapt, zum Beispiel '!'.
Dieselbe Query lässt sich mit explizit angegebenem Escape-Zeichen auch so schreiben:
MySQL 8.4SELECT job_id FROM Jobs WHERE progress LIKE '3!%' ESCAPE '!';
Hier übernimmt ! dieselbe Rolle wie \ im vorherigen Beispiel.
Interaktive Übung
Jetzt vertiefen wir das Gelernte mit einer kleinen Übung! In der Aufgabe unten sollst du E-Mail-Adressen den passenden LIKE-Mustern zuordnen, indem du sie in die entsprechenden Felder ziehst.
Interaktive Übung nicht verfügbar
Für die interaktive Übung wird eine Bildschirmbreite von mindestens 600 Pixeln benötigt. Öffne diese Seite auf einem Computer oder Tablet.