SQL-Abfrage: Muster suchen mit dem Schlüsselwort „LIKE“
@todo: LIKE und REGEXP trennen
Das Schlüsselwort LIKE gehört zu den wichtigsten Werkzeugen in SQL. Es wird verwendet, um in Datenbanken nach Mustern zu suchen – also nach Texten, Zahlen oder anderen Werten, die einer bestimmten „Struktur“ folgen. Während andere Schlüsselwörter wie = oder IN nach exakten Übereinstimmungen suchen, kannst du mit LIKE flexibler sein und Daten finden, die „so ähnlich aussehen“ wie das, was du suchst.
In diesem Artikel erkläre ich dir alles über LIKE: wie es funktioniert, welche Sonderzeichen du verwenden kannst, um Muster zu definieren, und welche Alternativen es gibt. Der Artikel ist absichtlich einfach gehalten, sodass auch absolute Anfänger ihn verstehen können.
Was macht LIKE in SQL?
Mit LIKE kannst du Daten finden, die einem bestimmten Muster entsprechen. Wenn du beispielsweise nach Wörtern suchst, die mit „A“ beginnen, die Buchstaben „nna“ enthalten oder mit „e“ enden, ist LIKE genau das Werkzeug, das du brauchst.
Die Grundform einer LIKE-Abfrage:
SELECT * FROM tabelle
WHERE spalte LIKE 'muster';
- spalte ist die Spalte deiner Tabelle, in der du suchen möchtest (z. B. „name“ oder „produktname“).
- muster ist das Suchmuster, das du definierst – inklusive spezieller Zeichen wie
%
und_
, die wir gleich erklären.
Beispiel
Angenommen, wir haben eine Tabelle personen
mit den folgenden Daten:
id | name |
---|---|
1 | Anna |
2 | Ben |
3 | Annabelle |
4 | Danna |
5 | Elias |
Wenn du alle Personen finden möchtest, deren Name mit „An“ beginnt, sieht deine Abfrage mit LIKE so aus:
SELECT * FROM personen
WHERE name LIKE 'An%';
Das Ergebnis wäre:
id | name |
---|---|
1 | Anna |
3 | Annabelle |
Platzhalterzeichen: % und _
1. Das Zeichen %
: Beliebig viele Zeichen
Der Platzhalter %
steht für beliebig viele Zeichen. Damit kannst du flexibel nach Werten suchen, die bestimmte Muster enthalten.
Beispiele:
- LIKE ‚A%‘: Findet alle Werte, die mit „A“ beginnen – egal, was danach kommt.
- LIKE ‚%e‘: Findet alle Werte, die mit „e“ enden.
- LIKE ‚%ann%‘: Findet alle Werte, die irgendwo die Buchstaben „ann“ enthalten.
Bei unserer Tabelle „personen“:
SELECT * FROM personen
WHERE name LIKE '%ann%';
Ergebnis:
id | name |
---|---|
1 | Anna |
3 | Annabelle |
4 | Danna |
2. Das Zeichen _
: Genau ein Zeichen
Der Platzhalter _
steht für ein einzelnes Zeichen. Du kannst es verwenden, wenn dich nur ein bestimmter Teil eines Musters interessiert.
Beispiele:
- LIKE ‚A_n_‘: Findet alle Werte, die mit „A“ beginnen, an zweiter Stelle ein beliebiges Zeichen haben, dann „n“ folgen und danach genau ein weiteres Zeichen haben.
- LIKE ‚_nna‘: Findet alle Werte, die mit einem beliebigen ersten Buchstaben beginnen und „nna“ enthalten.
Beispiel mit unserer Tabelle:
SELECT * FROM personen
WHERE name LIKE '_nna';
Ergebnis:
id | name |
---|---|
1 | Anna |
Beispiele für verschiedene Muster mit Platzhaltern
%i_
: Findet Daten mit „i“ am Ende, gefolgt von genau einem weiteren Zeichen.- Suche:
sql WHERE name LIKE '%i_'
- Beispielergebnisse: „Eli“, „Ali“.
- Suche:
_a%
: Findet Daten mit „a“ an zweiter Stelle, unabhängig von der Länge.- Suche:
sql WHERE name LIKE '_a%'
- Beispielergebnisse: „Danna“, „Banana“.
- Suche:
[G-J]%
: Findet Daten, deren erster Buchstabe im Bereich von „G“ bis „J“ liegt.- Suche:
sql WHERE name LIKE '[G-J]%'
- Beispielergebnis: „Jonas“, „Gina“.
- Suche:
[A,M]%
: Findet Daten, die mit „A“ oder „M“ beginnen.- Suche:
sql WHERE name LIKE '[A,M]%'
- Beispielergebnisse: „Anna“, „Maria“.
- Suche:
[AM]%
: Findet Daten, die mit „A“ oder „M“ beginnen. – für den einen oder anderen nicht so übersichtlich wie zuvor- Suche:
sql WHERE name LIKE '[AM]%'
- Beispielergebnisse: „Anna“, „Alfred“.
- Suche:
_%_%_%
: Findet Daten mit mindestens 3 beliebigen Zeichen.- Suche:
sql WHERE name LIKE '_%_%_%'
- Beispiel: „Anna“, „Benno“.
- Suche:
Wie sieht eine Alternative zu LIKE aus?
Eine mögliche Alternative zu LIKE ist die Verwendung von regulären Ausdrücken. Viele Datenbanksysteme unterstützen den Operator REGEXP (für reguläre Ausdrücke). Damit können komplexere Muster definiert werden.
Beispiel
Angenommen, du möchtest alle Namen finden, die mit „D“ oder „E“ beginnen und mit „a“ enden. Mit LIKE wird das schwierig. Mit einem regulären Ausdruck kannst du schreiben:
SELECT * FROM personen
WHERE name REGEXP '^[DE].*a$';
Vergleich zu LIKE:
- LIKE ist einfacher zu verstehen und eignet sich für grundlegende Muster.
- REGEXP bietet dir mehr Flexibilität, wenn es komplizierte Anforderungen gibt.
Geschwindigkeit: LIKE vs. Alternativen
LIKE:
- Wenn du mit Platzhaltern wie
%
am Anfang eines Musters suchst (z. B. ‚%text‘), kann das langsam sein, da die Datenbank die gesamte Spalte durchsuchen muss. - Wenn der Platzhalter nicht am Anfang steht (z. B. ‚text%‘), kann die Datenbank Indexe verwenden und die Suche beschleunigen.
REGEXP:
- Kann langsamer sein, da REGEXP komplexere Muster prüft.
- REGEXP ist für komplizierte Anforderungen gedacht und nicht für einfache Textanfragen.
Merke: Verwende LIKE, wenn es ausreicht; wechsle zu REGEXP, wenn du flexiblere Muster benötigst.
Sonderfälle bei LIKE
Groß- und Kleinschreibung
- Ob LIKE Groß- und Kleinschreibung beachtet, hängt vom Datenbanksystem und den Einstellungen ab.
- Beispiel: In manchen Systemen ist ‚Anna‘ LIKE ‚anna‘ wahr, in anderen nicht.
- Lösung: Verwende ILIKE (wenn unterstützt) oder wandle die Werte in Groß-/Kleinschrift um:
SELECT * FROM personen
WHERE LOWER(name) LIKE 'anna';
Fazit
Das SQL-Schlüsselwort LIKE ist ein mächtiges Werkzeug für die Textsuche in Datenbanken, weil es dir erlaubt, flexible Muster zu definieren und einfach umzusetzen.
Zusammengefasst:
- %: Beliebig viele Zeichen.
- Beispiel: LIKE ‚A%‘ → Alles, was mit „A“ beginnt.
- _: Genau ein Zeichen.
- Beispiel: LIKE ‚_nna‘ → Ein Zeichen, dann „nna“.
- Klammern
[]
: Bereich oder Auswahl von Zeichen.- Beispiel: LIKE ‚[A-D]%‘ → Anfangsbuchstabe A bis D.
- Alternativen: REGEXP für komplexere Muster.
Verwende LIKE, wann immer es möglich ist, und wechsle zu Alternativen wie REGEXP, wenn du mehr Flexibilität benötigst.