MySQL Platzhalter: Like, NOT Like, Escape, ( % ), ( _ )
⚡ Intelligente Zusammenfassung
MySQL Wildcards ermöglichen die musterbasierte Suche, indem sie die Operatoren LIKE und NOT LIKE mit Sonderzeichen kombinieren. Dies erklärt die Wildcards Prozentzeichen und Unterstrich, das Schlüsselwort ESCAPE, praktische Abfragen an die Datenbank myflixdb sowie Leistungsaspekte.

Was sind MySQL Platzhalter?
MySQL Wildcards Platzhalter sind spezielle Zeichen, die Ihnen helfen, Daten zu finden, die einem komplexen Muster anstatt eines exakten Werts entsprechen. Platzhalter werden immer in Verbindung mit dem Vergleichsoperator LIKE oder dem Vergleichsoperator NOT LIKE verwendet.
MySQL Unterstützt zwei Platzhalterzeichen, von denen jedes eine andere Frage zu Ihren Daten beantwortet.
| Wildcard | Bedeutung | Beispielmuster | Matches |
|---|---|---|---|
| % | Null (0) oder mehr Zeichen | '%Code%' | Code Name Black, Davinci Code |
| _ | Genau ein Zeichen | '200_' | 2005, 2008 |
Nachdem die beiden Charaktere nun definiert wurden, erklärt der nächste Abschnitt, warum es sich lohnt, sie zu lernen.
Warum Wildcards verwenden in MySQL?
Wer mit SQL vertraut ist, denkt vielleicht, dass man bereits mit SELECT und der WHERE-Klausel nach beliebigen komplexen Daten suchen kann. Warum also überhaupt Platzhalter verwenden?
Bevor wir diese Frage beantworten, betrachten wir ein Beispiel. Angenommen, die Marketingabteilung der Myflix-Videothek hat in Texas Werbeaktionen durchgeführt und möchte nun wissen, wie viele Mitglieder sich dort registriert haben. Mit der folgenden SELECT-Anweisung und der WHERE-Klausel erhalten Sie die gewünschten Informationen.
SELECT * FROM members WHERE postal_address = 'Austin, TX' OR postal_address = 'Dallas, TX' OR postal_address = 'Iola, TX' OR postal_address = 'Houston, TX';
Wie Sie der obigen Abfrage entnehmen können, ist das „WHERE-KlauselDie Abfrage wird dadurch langwierig und fehleranfällig: Jede neue Stadt muss manuell hinzugefügt werden, und eine einzige falsch geschriebene Adresse wird stillschweigend ausgeschlossen. Die Verwendung von Platzhaltern vereinfacht die Abfrage, da ein einziges Muster alle Städte im Bundesland abdeckt.
SELECT * FROM members WHERE postal_address LIKE '%TX';
Kurz gesagt, ermöglichen Wildcards die Integration leistungsstarker Suchfunktionen in datengetriebene Anwendungen mit deutlich weniger SQL-Code. Im nächsten Abschnitt wird jedes Wildcard-Zeichen einzeln erläutert.
Arten von MySQL Wildcards
% – Der Prozent-Platzhalter
Das Prozentzeichen (%) wird verwendet, um ein Muster anzugeben Null (0) oder mehr Zeichen. Es hat die folgende grundlegende Syntax.
SELECT * FROM table_name WHERE fieldname LIKE 'xxx%';
HIER:
- "SELECT-Anweisung“ ist der Standard-SQL-SELECT-Befehl.
- „WHERE“ ist das Schlüsselwort, mit dem der Filter angewendet wird.
- „LIKE“ ist der Vergleichsoperator, der in Verbindung mit Platzhaltern verwendet wird.
- „xxx“ steht für ein beliebiges vorgegebenes Muster, beispielsweise ein einzelnes Zeichen oder mehrere Zeichen, und „%“ steht für eine beliebige Anzahl von Zeichen, beginnend bei null (0).
Um die obige Aussage besser zu verstehen, betrachten wir ein praktisches Beispiel. Angenommen, wir möchten alle Filme finden, deren Titel das Wort „Code“ enthält. Dazu verwenden wir das Prozentzeichen als Platzhalter vor und nach dem Wort „Code“, um eine Musterübereinstimmung an beliebiger Stelle im Titel durchzuführen.
SELECT * FROM movies WHERE title LIKE '%code%';
Ausführen des obigen Skripts in MySQL Werkbank Der Vergleich mit der MyFlixDB-Datenbank liefert die unten dargestellten Ergebnisse.
| movie_id | Titel | Regisseur | Jahr_veröffentlicht | Kategorie ID |
|---|---|---|---|---|
| 4 | Code Name Black | Edgar Jimz | 2010 | NULL |
| 7 | Davinci Code | NULL | NULL | 6 |
Beachten Sie, dass das Suchwort „Code“ unabhängig davon zurückgegeben wird, ob es am Anfang oder am Ende des Titels steht. Dies liegt daran, dass das Suchmuster eine beliebige Anzahl von Zeichen vor und nach „Code“ zulässt.
Ändern wir nun das Skript so, dass das Prozentzeichen als Platzhalter nur am Anfang der Suchkriterien erscheint.
SELECT * FROM movies WHERE title LIKE '%code';
Ausführen des obigen Skripts in MySQL Die Workbench-Analyse der myflixdb-Datenbank liefert die unten dargestellten Ergebnisse.
| movie_id | Titel | Regisseur | Jahr_veröffentlicht | Kategorie ID |
|---|---|---|---|---|
| 7 | Davinci Code | NULL | NULL | 6 |
Beachten Sie, dass nur ein Datensatz zurückgegeben wurde. Das Muster passt auf eine beliebige Anzahl von Zeichen am Anfang des Titels, erfordert aber, dass der Titel … Ende mit „Code“.
Verschieben wir nun das Prozentzeichen ans Ende des Musters. Das geänderte Skript ist unten dargestellt.
SELECT * FROM movies WHERE title LIKE 'code%';
Ausführen des obigen Skripts in MySQL Die Workbench-Analyse der myflixdb-Datenbank liefert die unten dargestellten Ergebnisse.
| movie_id | Titel | Regisseur | Jahr_veröffentlicht | Kategorie ID |
|---|---|---|---|---|
| 4 | Code Name Black | Edgar Jimz | 2010 | NULL |
Es wird nur ein Datensatz erneut zurückgegeben, da dieses Muster auf jeden Titel zutrifft, der beginnt mit „Code“, gefolgt von einer beliebigen Anzahl von Zeichen. Die Position des %-Symbols bestimmt daher die Bedeutung der Suche.
💡 Tipp: Ein Muster wie „code%“ kann weiterhin einen Index für die Titelspalte verwenden, während dies bei „%code%“ nicht möglich ist. Ein vorangestelltes Prozentzeichen als Platzhalter erzwingt MySQL Um jede Zeile zu durchsuchen, muss das Wildcard-Zeichen immer dann rechts stehen, wenn die Suche dies zulässt.
_ – Der Unterstrich als Platzhalter
Der Unterstrich-Platzhalter wird verwendet passt genau zu einem ZeichenAngenommen, wir möchten alle Filme finden, die im Jahr 200x erschienen sind, wobei x genau ein Zeichen ist, das jeden beliebigen Wert annehmen kann. Das folgende Skript wählt alle Filme aus, die im Jahr „200x“ erschienen sind.
SELECT * FROM movies WHERE year_released LIKE '200_';
Ausführen des obigen Skripts in MySQL Die Workbench-Analyse der myflixdb-Datenbank liefert die unten dargestellten Ergebnisse.
| movie_id | Titel | Regisseur | Jahr_veröffentlicht | Kategorie ID |
|---|---|---|---|---|
| 2 | Sarah Marshal vergessen | Nicholas Stoller | 2008 | 2 |
| 9 | Honey moonERS | John Shultz | 2005 | 8 |
Beachten Sie, dass nur Filme zurückgegeben werden, deren year_released-Wert 200 gefolgt von einem beliebigen Zeichen ist. Im Gegensatz zum Prozentzeichen reserviert der Unterstrich Platz für genau ein Zeichen.
NICHT WIE bei Wildcards
Der logische Operator NOT kann zusammen mit Platzhaltern verwendet werden, um die Zeilen zurückzugeben, die die Bedingung erfüllen. kein Frontalunterricht. dem angegebenen Muster entsprechen.
Angenommen, wir möchten die Filme, die nicht in den Jahren 200x veröffentlicht wurden. Wir kombinieren den logischen Operator NOT mit dem Unterstrich als Platzhalter, wie unten gezeigt.
SELECT * FROM movies WHERE year_released NOT LIKE '200_';
| movie_id | Titel | Regisseur | Jahr_veröffentlicht | Kategorie ID |
|---|---|---|---|---|
| 1 | Fluch der Karibik 4 | Rob Marshall | 2011 | 1 |
| 4 | Code Name Black | Edgar Jimz | 2010 | NULL |
| 8 | Unterwelt-Awakeninh | Michael Eal | 2012 | 6 |
Es werden nur die Filme zurückgegeben, die nicht dem 200x-Muster entsprechen, da NOT das Ergebnis des Wildcard-Vergleichs umkehrt. Beachten Sie, dass Zeilen, die ein NULL LIKE und NOT LIKE geben niemals einen Wert zurück, da NULL unbekannt und nicht ungleich ist.
ESCAPE-Schlüsselwort
Das Schlüsselwort ESCAPE wird dazu verwendet Escape-Mustererkennungszeichen wie beispielsweise die Prozentangabe (%) und der Unterstrich (_), wenn sie Teil der Daten selbst sind.
Angenommen, wir möchten nach der Zeichenkette „67%“ suchen. Wir deklarieren ein Escape-Zeichen und platzieren es unmittelbar vor dem Zeichen, das als Daten gelesen werden soll.
LIKE '67#%%' ESCAPE '#';
Wenn wir den Film „67% Guilty“ finden wollen, können wir das unten gezeigte Skript verwenden.
SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';
Beachten Sie die doppelten „%%“ in der LIKE-Klausel. Dem ersten steht das Escape-Zeichen (#) voran und es wird daher als Teil der gesuchten Zeichenkette interpretiert. Das zweite behält seine Platzhalterbedeutung und steht für eine beliebige Anzahl nachfolgender Zeichen.
Als Escape-Zeichen kann jedes beliebige Zeichen dienen, daher funktioniert die gleiche Abfrage auch mit dem Gleichheitszeichen.
SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';
Platzhalter eignen sich sehr gut für einfache Suchmuster, aber manche Suchanfragen erfordern komplexere Regeln. Der folgende Vergleich zeigt, wo die Grenzen liegen.
MySQL Wildcards vs. REGEXP: Welche Variante sollten Sie verwenden?
MySQL Es werden nur zwei Platzhalterzeichen unterstützt. Zeichenlisten wie [ac], die von einigen anderen Datenbank-Engines innerhalb von LIKE akzeptiert werden, werden nicht unterstützt. Wenn eine Suche Zeichenbereiche, Alternierungen oder Verankerungen erfordert, REGEXP-Operator ist die richtige Wahl.
| Kriterium | LIKE mit Wildcards | REGEXP |
|---|---|---|
| Musterkraft | Nur zwei Symbole: % und _ | Charakterklassen, Wertebereiche, Wechsel, Wiederholung |
| Typische Verwendung | Präfix-, Suffix- oder „enthält“-Suchen | Validierung, komplexes Matching, mehrere Alternativen |
| Indexnutzung | Möglich, wenn das Muster nicht mit % beginnt. | Verwendet niemals einen Index |
| Ablesbarkeit | Einfach für Anfänger | Steilere Lernkurve |
Verwenden Sie in der Regel zuerst LIKE: Es ist leichter lesbar und als einziger der beiden Operatoren von einem Index profitieren kann. Wechseln Sie zu REGEXP, wenn ein einzelnes Muster mehrere Alternativen ausdrücken soll, beispielsweise alle Titel, die mit einer Ziffer beginnen. Beide Operatoren führen schreibgeschützte Vergleiche durch, sodass keiner der beiden die von LIKE zurückgegebenen Zeilen verändert. INSERT or AKTUALISIEREN Aussagen; sie filtern nur das, was die WHERE-Klausel auswählt.
