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.

  • 🔍 Kerndefinition: Wildcards sind Platzhalterzeichen, die LIKE und NOT LIKE verwenden, um Textmuster anstelle von exakten Werten abzugleichen.
  • 📊 Prozentualer Platzhalter: Das %-Symbol steht für null oder mehr Zeichen, daher gibt '%code%' alle Filmtitel zurück, die das Wort Code enthalten.
  • 🔡 Unterstrich-Wildcard: Das Symbol _ steht für genau ein Zeichen, daher liefert '200_' Titel, die zwischen 2000 und 2009 veröffentlicht wurden.
  • 🚫 Negationsregel: NOT LIKE kehrt den Vergleich um und gibt jede Zeile zurück, die nicht dem angegebenen Muster entspricht.
  • 🛡️ Fluchtmaßnahmen: Das Schlüsselwort ESCAPE kennzeichnet ein einzelnes % oder _ innerhalb der Suchzeichenkette, sodass es als Daten behandelt wird.
  • Leistungseinblick: Ein vorangestelltes Prozentzeichen blockiert die Indexnutzung und erzwingt einen vollständigen Tabellenscan. Daher sollten Ankermuster nach Möglichkeit links platziert werden.
  • 🧩 Methodenauswahl: LIKE deckt einfache Präfix- und Suffixübereinstimmungen ab, während REGEXP Zeichenklassen und Alternationen behandelt.

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.

Häufig gestellte Fragen

Nein, nicht standardmäßig. LIKE richtet sich nach der Sortierung der Spalte und dem Standard MySQL Sortierungen unterscheiden nicht zwischen Groß- und Kleinschreibung, daher passt auch 'code%' zu "CodeFügen Sie das Schlüsselwort BINARY vor der Spalte ein, wenn eine Übereinstimmung unter Berücksichtigung der Groß-/Kleinschreibung erforderlich ist.

Ja. MySQL Der Wert wird vor dem Vergleich in einen String umgewandelt, weshalb beispielsweise `year_released LIKE '200_'` funktioniert. Durch diese Umwandlung wird die Indexnutzung für diese Spalte verhindert. Filtern Sie daher bei großen Tabellen mit Bereichen wie `BETWEEN 2000 AND 2009`.

Nein. Die von einigen anderen Engines akzeptierte Liste der in Klammern gesetzten Zeichen ist innerhalb eines Befehls ungültig. MySQL LIKE-Muster. Verwenden Sie das REGEXP-Operator stattdessen beispielsweise title REGEXP '^[ac]', um einen Bereich von Anfangszeichen abzugleichen.

Ja. KI-Assistenten übersetzen Anfragen in Klartext in LIKE-Muster, die Sie in einem Client wie beispielsweise ausführen können. MySQL WerkbankÜberprüfen Sie immer das generierte Muster, denn das Verschieben eines einzelnen Prozentzeichens (%) ändert, welche Zeilen zurückgegeben werden.

KI-gestützte Abfrageberater lesen die EXPLAIN-Ausgabe und kennzeichnen führende Wildcard-Muster, die Indizes überspringen. Anschließend schlagen sie Alternativen wie die Volltextsuche, ein Präfixmuster oder … vor. REGEXP, die Sie noch anhand Ihrer eigenen Datenmengen validieren müssen.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: