MySQL - RLIKE Operator

Hallo, angehende Datenbankenthusiasten! Heute machen wir uns auf eine aufregende Reise in die Welt des MySQL RLIKE Operators. Als dein freundlicher Nachbarschaftsinformatiklehrer bin ich hier, um dich durch dieses Thema mit vielen Beispielen und Erklärungen zu führen. Also, hol dir dein virtuelles Notizbuch und tauchen wir ein!

MySQL - RLIKE Operator

MySQL RLIKE Operator

Was ist RLIKE?

RLIKE ist ein mächtiger Operator in MySQL, der es uns ermöglicht, mit regulären Ausdrücken eine Patternübereinstimmung durchzuführen. Jetzt weiß ich, was du denkst - "Reguläre Ausdrücke? Das klingt schrecklich!" Aber keine Sorge, wir werden das Schritt für Schritt durchgehen.

Denke an RLIKE als ein superintelligentes Suchwerkzeug. Es ist wie ein Detektiv in deiner Datenbank, der Informationen basierend auf komplexen Mustern finden kann. Cool, oder?

Grundlegende Syntax

Die grundlegende Syntax des RLIKE Operators ist:

expr RLIKE pattern

Hier ist expr der Ausdruck (normalerweise ein Spaltenname), den wir durchsuchen möchten, und pattern ist der reguläre Ausdruck, den wir übereinstimmen möchten.

Lassen wir mit einem einfachen Beispiel beginnen:

SELECT * FROM customers WHERE last_name RLIKE 'son$';

Diese Abfrage findet alle Kunden, deren Nachname mit 'son' endet. Das $ Symbol im Muster bedeutet "Ende der Zeichenkette". Also wird es Namen wie Johnson, Wilson oder Anderson matchen.

Muster, die mit RLIKE verwendet werden

Nun schauen wir uns einige gängige Muster an, die wir mit RLIKE verwenden können. Ich mag es, diese als die geheimen Codes zu denken, die unser Datenbankdetektiv verwendet, um Rätsel zu lösen!

Muster Beschreibung Beispiel
^ Passt zur Anfang eines Strings '^A' passt zu 'Apple' aber nicht zu 'Banana'
$ Passt zum Ende eines Strings 'e$' passt zu 'Apple' aber nicht zu 'Banana'
. Passt zu jedem einzelnen Zeichen 'b.t' passt zu 'bat', 'bit', 'but', etc.
* Passt zu null oder mehr Vorkommen des vorherigen Zeichens 'go*gle' passt zu 'ggle', 'google', 'gooogle', etc.
+ Passt zu einem oder mehr Vorkommen des vorherigen Zeichens 'go+gle' passt zu 'google', 'gooogle' aber nicht zu 'ggle'
[] Passt zu jedem einzelnen Zeichen innerhalb der Klammern '[aeiou]' passt zu jedem Vokal
[^] Passt zu jedem einzelnen Zeichen außerhalb der Klammern '[^0-9]' passt zu jedem nichtnumerischen Zeichen

Lassen wir einige davon verwenden!

SELECT * FROM products WHERE name RLIKE '^A.*e$';

Diese Abfrage findet alle Produkte, deren Namen mit 'A' beginnt und auf 'e' endet. Das .* in der Mitte bedeutet "null oder mehr von jedem Zeichen". Also würde dies Namen wie "Apple", "Airplane" oder sogar nur "Ae" matchen.

RLIKE auf Zeichenfolgen

RLIKE ist nicht nur zum Suchen in Tabellen geeignet. Wir können es auch direkt auf Zeichenfolgen anwenden! Das ist großartig, um unsere Muster vor der Verwendung in einer Abfrage zu testen.

SELECT 'MySQL' RLIKE 'SQL$';

Dies wird 1 (wahr) zurückgeben, weil 'MySQL' tatsächlich mit 'SQL' endet.

Hier ist ein lustiges Beispiel:

SELECT 'Mississippi' RLIKE 's+is+';

Dies gibt 1 zurück, weil 'Mississippi' einen oder mehrere 's' gefolgt von 'i' gefolgt von einem oder mehreren 's' enthält. Es matcht 'ssis' in der Mitte des Wortes.

RLIKE Operator mit einem Client-Programm

Nun schauen wir uns an, wie wir RLIKE in einem komplexeren Szenario verwenden können. Stellen wir uns vor, wir haben eine Tabelle mit E-Mail-Adressen und wir möchten alle Gmail-Adressen finden. So könnten wir das machen:

SELECT * FROM users WHERE email RLIKE '^[A-Za-z0-9._%+-]+@gmail\\.com$';

Wow, das sieht kompliziert aus! Lassen wir es auseinanderbrechen:

  • ^ : Anfang der Zeichenkette
  • [A-Za-z0-9._%+-]+ : Eins oder mehr Buchstaben, Zahlen oder spezielle Zeichen, die in E-Mail-Adressen erlaubt sind
  • @ : Das @ Symbol
  • gmail\\.com : Wörtlich "gmail.com" (wir müssen den Punkt mit einem Backslash escapen)
  • $ : Ende der Zeichenkette

Dieses Muster wird jede Standard-Gmail-Adresse matchen.

Hier ist eine kleine Geschichte aus meiner Lehrerfahrung: Ich hatte einmal einen Schüler, der versucht hat, alle Benutzer mit AOL-E-Mail-Adressen in einer Datenbank zu finden. Er überprüfte jede Eintragung manuell (es gab tausende!). Als ich ihm zeigte, wie man das mit RLIKE macht, war er so aufgeregt, dass er praktisch im Klassenzimmer getanzt ist!

Übungzeit!

Lassen wir mit einem spaßigenExercise enden. Kannst du ein RLIKE-Muster schreiben, um alle Telefonnummern im Format (XXX) XXX-XXXX zu finden? Probier es aus und überprüfe dann die Antwort unten!

SELECT * FROM contacts WHERE phone RLIKE '^\\\([0-9]{3}\\\) [0-9]{3}-[0-9]{4}$';

Dieses Muster matcht:

  • ^\\\( : Beginnt mit einer offenen Klammer (zweimal escaped, weil es in beiden Regex und MySQL spezial ist)
  • [0-9]{3} : Genau drei Ziffern
  • \\\) : Eine schließende Klammer
  • ` ` : Ein Leerzeichen
  • [0-9]{3} : Drei weitere Ziffern
  • - : Ein Bindestrich
  • [0-9]{4} : Vier abschließende Ziffern
  • $ : Ende der Zeichenkette

Und das war's! Du bist jetzt mit der Macht von RLIKE ausgestattet. Denke daran, wie jede Superkraft, nutze sie weise. Viel Spaß beim Abfragen, zukünftige Datenbank-Zauberer!

Credits: Image by storyset