I SQL, LIKE
operatorn låter dig göra mönstermatchning. Det avgör om en specifik teckensträng matchar ett specificerat mönster.
Ett mönster kan innehålla vanliga tecken och jokertecken.
Källtabell
Följande tabell används för exemplen på den här sidan.
SELECT * FROM Owners;
Resultat:
+-----------+-------------+------------+----------------+-------------------+ | 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] | +-----------+-------------+------------+----------------+-------------------+
Exempel
Här är ett exempel för att visa hur LIKE
operatören fungerar.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%.com';
Resultat:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Woody | Eastwood | [email protected] | +-------------+------------+-------------------+
I det här exemplet använde jag LIKE
operatorn i kombination med %
jokerteckenoperatör för att returnera ägare vars e-postadresser slutar på .com
.
GILLA
kan också användas med andra strängoperatorer, såsom _
, []
och [^]
.
%
Jokertecken-operatör
%
jokerteckenoperator matchar en sträng med noll eller fler tecken. Det kan användas som antingen ett prefix eller ett suffix, och det kan också användas i mitten av en sträng.
Det tenderar att användas oftare som ett suffix, och det har begränsad användning i mitten av mönster, även om det finns några giltiga användningsfall för att använda det i mitten av ett mönster, till exempel följande:
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '[email protected]%.com';
Resultat:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | [email protected] | +-------------+------------+------------------+
I det här fallet kände vi inte till barts e-postadress, men vi visste att det började med [email protected]
och slutade med .com
. Därför kunde vi använda LIKE
i kombination med %
jokerteckenoperatör för att fylla i resten.
Tänk på att den här tekniken kan returnera många irrelevanta rader, beroende på data och hur du konstruerar din SQL-sats.
Jokertecken-operatör
Understrecket (__
) jokerteckenoperator matchar vilket enskilt tecken som helst.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE 'b_rt';
Resultat:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | [email protected] | | Burt | Tyson | [email protected] | +-------------+------------+------------------+
[] Jokertecken-operatör
Hakparenteserna ([]
) jokerteckenoperator matchar alla enstaka tecken inom det angivna intervallet eller uppsättningen som anges mellan hakparenteserna.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[bh]%';
Resultat:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Boris | Trump | NULL | | Burt | Tyson | [email protected] | +-------------+------------+-------------------+
Här kombinerade jag jokertecken för parenteser med procenttecknet för att returnera alla ägare vars förnamn börjar med antingen b
eller h
.
Observera att operatören för parenteser inte har någon utbredd användning i DBMS. Det stöds i SQL Server, men det stöds inte i MySQL, Oracle, DB2 och SQLite. Kontrollera din DBMS-dokumentation för att se om den stöder denna operatör.
[^] Jokertecken-operatör
Caret-tecknet (^
) kan användas för att förneka resultaten när du använder parentes-operatorn.
Så vi ändrar det föregående exemplet till att endast returnera de ägare vars förnamn inte gör det börja med b
eller h
.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[^bh]%';
Resultat:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Nancy | Simpson | NULL | | Woody | Eastwood | [email protected] | +-------------+------------+-------------------+
NULL-värden
Procentandelen (%
) jokertecken matchar vad som helst – nästan. En sak som inte matchar är NULL
.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%';
Resultat:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | [email protected] | | Bart | Pitt | [email protected] | | Woody | Eastwood | [email protected] | | Burt | Tyson | [email protected] | +-------------+------------+-------------------+
I vår tabell finns det två rader med NULL
i E-post
kolumn, men de returneras inte här.
Prestanda
Frågor som innehåller LIKE
operatorn kan köras mycket långsammare än andra frågor, och du bör förmodligen undvika att använda LIKE
operatör om du inte verkligen behöver det. Med hjälp av %
operator som prefix kan vara särskilt långsam.
Därmed inte sagt att du inte ska använda det alls. LIKE
operatör är en integrerad del av SQL, och du kommer att stöta på många scenarier där det kommer att vara det enda alternativet (eller åtminstone det bästa alternativet).