Database
 sql >> Datenbank >  >> RDS >> Database

SQL LIKE-Operator für Anfänger

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.