In SQL das LIKE
-Operator ermöglicht Ihnen den Musterabgleich. Es bestimmt, ob eine bestimmte Zeichenfolge mit einem bestimmten Muster übereinstimmt.
Ein Muster kann reguläre Zeichen und Platzhalterzeichen enthalten.
Quelltabelle
Die folgende Tabelle wird für die Beispiele auf dieser Seite verwendet.
SELECT * FROM Owners;
Ergebnis:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | [email protected] | | 2 | Bart | Pitt | (231) 465-3497 | [email protected] | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | [email protected] | | 6 | Burt | Tyson | (309) 565-0112 | [email protected] | +-----------+-------------+------------+----------------+-------------------+
Beispiel
Hier ist ein Beispiel, um zu demonstrieren, wie der LIKE
Betreiber funktioniert.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%.com';
Ergebnis:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Woody | Eastwood | [email protected] | +-------------+------------+-------------------+
In diesem Beispiel habe ich den LIKE
verwendet Operator in Verbindung mit dem %
Wildcard-Operator, um Eigentümer zurückzugeben, deren E-Mail-Adressen auf .com
enden .
LIKE
kann auch mit anderen Zeichenfolgenoperatoren verwendet werden, wie z. B. _
, []
, und [^]
.
Der %
Wildcard-Operator
Der %
Platzhalteroperator passt auf eine beliebige Zeichenfolge mit null oder mehr Zeichen. Es kann entweder als Präfix oder Suffix verwendet werden, und es kann auch in der Mitte einer Zeichenfolge verwendet werden.
Es wird häufiger als Suffix verwendet und hat eine begrenzte Verwendung in der Mitte von Mustern, obwohl es einige gültige Anwendungsfälle für die Verwendung in der Mitte eines Musters gibt, wie z. B. die folgenden:
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '[email protected]%.com';
Ergebnis:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | [email protected] | +-------------+------------+------------------+
In diesem Fall kannten wir die E-Mail-Adresse von Bart nicht, aber wir wussten, dass sie mit [email protected]
begann und endete mit .com
. Daher konnten wir LIKE
verwenden in Verbindung mit dem %
Wildcard-Operator, um den Rest auszufüllen.
Denken Sie daran, dass diese Technik viele irrelevante Zeilen zurückgeben kann, abhängig von den Daten und davon, wie Sie Ihre SQL-Anweisung aufbauen.
Der _
Wildcard-Operator
Der Unterstrich (_
) Wildcard-Operator passt auf jedes einzelne Zeichen.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE 'b_rt';
Ergebnis:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | [email protected] | | Burt | Tyson | [email protected] | +-------------+------------+------------------+
Der []
Wildcard-Operator
Die Klammern ([]
) Wildcard-Operator stimmt mit jedem einzelnen Zeichen innerhalb des angegebenen Bereichs oder Satzes überein, der zwischen den Klammern angegeben ist.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[bh]%';
Ergebnis:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Boris | Trump | NULL | | Burt | Tyson | [email protected] | +-------------+------------+-------------------+
Hier habe ich den Platzhalter in Klammern mit dem Prozentzeichen kombiniert, um alle Eigentümer zurückzugeben, deren Vorname entweder mit b
beginnt oder h
.
Beachten Sie, dass der Klammeroperator in DBMS nicht weit verbreitet ist. Es wird in SQL Server unterstützt, aber nicht in MySQL, Oracle, DB2 und SQLite. Sehen Sie in Ihrer DBMS-Dokumentation nach, ob dieser Operator unterstützt wird.
Der [^]
Wildcard-Operator
Das Caret-Zeichen (^
) kann verwendet werden, um die Ergebnisse zu negieren, wenn der Klammeroperator verwendet wird.
Also ändern wir das vorherige Beispiel so, dass nur die Eigentümer zurückgegeben werden, deren Vorname nicht ist beginnen Sie mit b
oder h
.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[^bh]%';
Ergebnis:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Nancy | Simpson | NULL | | Woody | Eastwood | [email protected] | +-------------+------------+-------------------+
NULL-Werte
Der Prozentsatz (%
) Wildcard stimmt mit allem überein – fast. Eine Sache, die nicht übereinstimmt, ist NULL
.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%';
Ergebnis:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Woody | Eastwood | [email protected] | | Burt | Tyson | [email protected] | +-------------+------------+-------------------+
In unserer Tabelle gibt es zwei Zeilen mit NULL
in der Email
Spalte, aber diese werden hier nicht zurückgegeben.
Leistung
Abfragen, die den LIKE
enthalten -Operator kann viel langsamer als andere Abfragen ausgeführt werden, und Sie sollten wahrscheinlich die Verwendung von LIKE
vermeiden Betreiber, es sei denn, Sie brauchen ihn wirklich. Verwenden Sie den %
Operator als Präfix kann besonders langsam sein.
Das heißt nicht, dass Sie es überhaupt nicht verwenden sollten. Das LIKE
Operator ist ein integraler Bestandteil von SQL, und Sie werden auf viele Szenarien stoßen, in denen dies die einzige Option (oder zumindest die beste Option) sein wird.