Course
SQL LIKE Pattern Matching Tutorial
Der SQL LIKE Operator für Mustervergleiche
Ob du es magst oder nicht, der LIKE
Operator ist in SQL unerlässlich. Sie gibt Datenpraktikern die Möglichkeit, Daten nach bestimmten String-Übereinstimmungen zu filtern. Dieser Artikel bietet eine kurze Einführung in LIKE
für Anfänger und Fortgeschrittene.
Um den Beispielcode in diesem Lehrgang ganz einfach selbst auszuführen, kannst du kostenlos eine DataLab-Arbeitsmappe erstellen, in der SQL, die Datenbank und alle Code-Beispiele für dich vorinstalliert sind.
Werde SQL-zertifiziert
Mitarbeiter |
|||||
emp_no |
birth_date |
first_name |
last_name |
Geschlecht |
hire_date |
10001 |
1953-09-02T00:00:00.000Z |
Georgi |
Facello |
M |
1986-06-26T00:00:00.000Z |
10002 |
1964-06-02T00:00:00.000Z |
Bezalel |
Simmel |
F |
1985-11-21T00:00:00.000Z |
10003 |
1959-12-03T00:00:00.000Z |
Parto |
Bamford |
M |
1986-08-28T00:00:00.000Z |
Angenommen, du hast eine Tabelle employees
und möchtest alle Namen finden, die mit ‘A’
beginnen. Du könntest Zeit damit verbringen, die Tabelle manuell durchzusehen. Aber warum solltest du das tun, wenn du den LIKE-Operator hast?
SELECT DISTINCT
first_name
FROM employees
WHERE first_name LIKE 'A%'
Die Magie liegt hier in der Klausel `WHERE first_name LIKE ‘A%’`
, die bedeutet: "Finde alle first_name
, die mit A beginnen und mit einer beliebigen Anzahl von Zeichen enden." Die `A%`
ist hier als Muster für den Abgleich bekannt.
`%`
ist nicht der einzige Platzhalter, den du in Verbindung mit dem LIKE
Operator verwenden kannst. Du kannst auch das Unterstrichzeichen `_`
verwenden.
`%`
passt auf eine beliebige Anzahl von Zeichen.`_`
passt auf jedes einzelne Zeichen.
Die Syntax ist leicht zu merken. Es ist einfach
column_name LIKE pattern
Du kannst LIKE
verwenden, um eine Vielzahl von Mustern abzugleichen. Und so geht's.
SQL LIKE Beispiele für Anfänger
Nachfolgend findest du einige praktische Beispiele, wie du die Anweisung LIKE
verwenden kannst, sowie die Ergebnisse aus unserem Beispieldatensatz.
1. Verwende LIKE
für exakte String-Übereinstimmung
Wenn du einen exakten String-Match durchführen möchtest, verwende LIKE ohne ‘%’
oder ‘_’
SELECT
first_name, last_name
FROM employees
WHERE first_name LIKE 'Barry' -- the same as WHERE first_name = ‘Barry’
2. Verwende ‘%’
um eine beliebige Anzahl von Zeichen zu finden
‘%’
kann verwendet werden, um eine beliebige (auch null) Anzahl von Zeichen zu finden - eine Zahl, ein Alphabet oder ein Symbol.
Angenommen, du willst alle Mitarbeiter finden, deren Name mit ‘Adam’
beginnt; du kannst das Muster ‘Adam%’
SELECT DISTINCT
first_name
FROM employees
WHERE first_name LIKE 'Adam%'
Um Namen zu finden, die mit ’Z’
enden, probiere das Muster ‘%z’
aus. Du kannst auch mehrere ‘%’
in einem Muster verwenden. Wenn du zum Beispiel Namen finden willst, die z enthalten, benutze ‘%z%’
.
3. Verwende ‘_’
um ein (und nur ein) Zeichen zu finden
Wie bei dem Spiel Hangman kann das Unterstrichzeichen _
nur ein Zeichen enthalten.
Wie viele Möglichkeiten gibt es, Le_n
zu buchstabieren? Das Muster würde auf alles von ‘Lexn’
, ‘LeAn’
, Le3n’
oder ‘Le-n’
passen.
SELECT DISTINCT
first_name
FROM employees
WHERE first_name LIKE 'Le_n'
Wie lauten die verschiedenen Namen mit nur drei Buchstaben? Wir können das herausfinden, indem wir drei aufeinanderfolgende Unterstriche ___ als Muster verwenden.
SELECT DISTINCT
first_name
FROM employees
WHERE first_name LIKE '___'
4. Beides verwenden ‘%’
und ‘_’
um jedes Muster zu erfüllen
Natürlich kannst du sowohl ‘%’
als auch ‘_’
verwenden, um interessante Muster zu erstellen.
SELECT DISTINCT
first_name
FROM employees
WHERE first_name LIKE '%ann_'
Das Muster ‘%ann_’
passt auf eine Zeichenfolge, die mit einer beliebigen Anzahl von Zeichen beginnt und mit ‘ann’
und einem weiteren Zeichen endet.
5. Verwende NOT
um Zeichenketten zu finden, die nicht mit einem Muster übereinstimmen
Was ist, wenn du alle Zeilen finden willst, die ein bestimmtes Kriterium nicht erfüllen? Du kannst den NOT LIKE
Operator verwenden. Um zum Beispiel alle Titel außer Staff zu finden, können wir die folgende Syntax verwenden
`WHERE title NOT LIKE ‘Staff’`
Dies ist genau gleich wie die Syntax
`WHERE title != ‘Staff’`
SELECT DISTINCT
title
FROM titles
WHERE title NOT LIKE 'Staff'
Natürlich kannst du `NOT LIKE`
mit jedem der beschriebenen Muster verwenden.
SELECT DISTINCT
title
FROM titles
WHERE title NOT LIKE '%engineer'
6. Verwende LOWER
(oder UPPER
) mit LIKE
für den Mustervergleich ohne Berücksichtigung der Groß- und Kleinschreibung
Wenn du einen Mustervergleich durchführen musst, aber nicht sicher bist, ob die Zeichenfolge in Klein-, Groß- oder gemischter Großschreibung gespeichert ist, kannst du die folgende Syntax verwenden.
`LOWER(column_name) LIKE pattern`
Die Funktion LOWER()
gibt alle Zeichenketten in Kleinbuchstaben zurück, unabhängig davon, ob sie als Groß-, Klein- oder Mischbuchstaben gespeichert sind.
Wenn du die Syntax verwendest, achte darauf, dass du das Muster in Kleinbuchstaben schreibst! Andernfalls bekommst du vielleicht keine Treffer.
Du könntest auch LOWER
durch UPPER
in der obigen Syntax ersetzen. Achte darauf, dass du das Muster in GROSSBUCHSTABEN schreibst.
`UPPER(column_name) LIKE PATTERN`
Um zum Beispiel herauszufinden, ob der Name eines Mitarbeiters Joanne, JoAnne, Joanna oder JoAnna ist, versuche eine der folgenden Möglichkeiten.
SELECT DISTINCT
first_name
FROM employees
WHERE lower(first_name) LIKE 'joann_'
SELECT DISTINCT
first_name
FROM employees
WHERE UPPER(first_name) LIKE 'JOANN_'
7. SQL LIKE
mit mehreren Werten mit OR/AND
Du kannst auch mehrere Bedingungen mit der LIKE
Syntax kombinieren.
Verwende zum Beispiel die OR
Bedingung, um Ergebnisse zu finden, die mindestens eines von mehreren LIKE
Mustern erfüllen.
SELECT DISTINCT
first_name
FROM employees
WHERE
first_name LIKE 'Ad_l' OR
first_name LIKE 'Ad_m'
Wenn du hingegen eine Zeichenfolge finden willst, die auf mehrere Bedingungen von LIKE
passt, verwende das Schlüsselwort AND
.
SELECT DISTINCT
first_name
FROM employees
WHERE
first_name LIKE '%am%' AND
first_name LIKE '%me%'
Die LIKE
Syntax kann auf mehrere Spalten angewendet werden, solange ihr Variablentyp ein Zeichen mit variabler Länge ist (varchar
). Wenn wir wissen, dass wir die Namen der Mitarbeiter herausfinden können, deren Initialen ‘Z. Z.’
SELECT DISTINCT
first_name, last_name
FROM employees
WHERE
first_name LIKE 'Z%' AND
last_name LIKE 'Z%'
8. Verwende LIKE
in der SELECT CASE WHEN
clause
Bisher haben wir uns darauf konzentriert, LIKE
als Bedingung für die Auswahl von Datensätzen in der WHERE
Klausel zu verwenden. Wir verwenden LIKE
auch in der SELECT
Klausel. Können wir zum Beispiel herausfinden, wie viele Mitarbeiter mit dem Namen ‘Adam’
in unserer Datenbank sind?
SELECT
COUNT(CASE WHEN first_name LIKE 'Adam' THEN 1 END) num_employees_adam
FROM employees
Andererseits, wie viele Mitarbeiter haben die Initialen ‘A.Z.’
?
SELECT
COUNT(CASE WHEN first_name LIKE 'A%' AND last_name LIKE 'Z%' THEN 1 END) num_employees
FROM employees
Beispiele für SQL LIKE für Fortgeschrittene
Die Funktion LIKE
ist in den verschiedenen SQL-Varianten (z. B. PostgreSQL, MySQL, Redshift usw.) weitgehend ähnlich. Einige haben zusätzliche Varianten der Funktion LIKE
, die erwähnenswert sind.
1. Die ILIKE
Betreiber
ILIKE
ist in Redshift und PostgreSQL verfügbar und ist die Version von LIKE
, die Groß- und Kleinschreibung nicht berücksichtigt. Somit sind alle folgenden Punkte gleichwertig.
SELECT
datacamp ILIKE ‘datacamp’, -- returns TRUE
DATACAMP ILIKE ‘datacamp’, -- returns TRUE
Datacamp ILIKE ‘datacamp’, -- returns TRUE
datacamp ILIKE ‘DataCamp’, -- returns TRUE
2. Eckige Klammern verwenden []
und [^]
als Platzhalterzeichen
Benutzer von T-SQL oder SQL Server haben zusätzliche Platzhalterzeichen für komplexere Mustervergleiche.
Die Syntax der eckigen Klammern []
passt auf jedes einzelne Zeichen innerhalb des Bereichs oder der Menge. Die folgenden Beispiele geben zum Beispiel alle TRUE zurück.
SELECT
‘Carson’ LIKE ‘[C-K]arson’, -- returns TRUE because C is in the range C-K
‘Karson’ LIKE ‘[C-K]arson’, -- returns TRUE because K is in range
‘Larson’ LIKE ‘[CKL]arson’, -- returns TRUE because L is in the set [CKL]
‘Parson’ LIKE ‘[C-K]arson’ -- returns FALSE because P is out of range
Der Platzhalter "caret-in-square-bracket" [^]
passt auf jedes einzelne Zeichen, das nicht in dem angegebenen Bereich oder Satz liegt. Kannst du sehen, warum die folgenden Ergebnisse so sind?
SELECT
‘Carson’ LIKE ‘[^C-K]arson’ -- returns FALSE
‘Parson’ LIKE ‘[^C-K]arson’ -- returns TRUE
Da C
im Bereich von [C-K]
liegt, passt das Muster ‘C’
nicht zu [^C-K]
. Daher wird ‘Carson’
nicht mit ‘[^C-K]arson
übereinstimmen.
3. Die RLIKE
Betreiber
Der in MySQL verfügbare RLIKE
Operator erkennt reguläre Ausdrücke (RegEx) im Muster. RegEx ist ein leistungsfähiges und vielseitiges Werkzeug für den erweiterten Mustervergleich.
Es kann nicht schaden, ein Grundverständnis von RegEx zu haben, vor allem wenn deine SQL-Variante RLIKE unterstützt. Mehr über RegEx kannst du in unserem Kurs Reguläre Ausdrücke in Python lernen.
SELECT DISTINCT
first_name
FROM employees
WHERE first_name RLIKE 'Susann[a-e]'
4. Die ‘~~’
Betreiber
In PostgreSQL ist ‘~~’
völlig gleichbedeutend mit LIKE
. Es gibt auch Äquivalente von ILIKE
, NOT LIKE
und NOT ILIKE
.
Betreiber |
Äquivalent |
|
|
|
|
|
|
|
|
Verwende SQL LIKE selbstbewusst
Die Beherrschung von SQL-Funktionen ist der Schlüssel zum Erfolg in der Datenwissenschaft, und der LIKE-Befehl von SQL ist keine Ausnahme. Eine gute Beherrschung von SQL wird deinen Fortschritt in der Analytik beschleunigen, also lerne es gut!
Wenn du mehr über SQL wissen willst, solltest du dir die folgenden Seiten ansehen:
Werde Dateningenieur
Erfahre mehr über SQL
Course
Daten in SQL verknüpfen
Course