sql >> Databasteknik >  >> RDS >> Database

SQL LIKE-operatör för nybörjare

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).


  1. Två SQL LEFT JOINS ger felaktigt resultat

  2. Hur man kombinerar resultaten av två frågor i SQL

  3. Python, Ruby och Golang:A Web Service Application Comparison

  4. Hur man infogar värde i identitetskolumn manuellt i SQL Server-tabell - SQL Server / T-SQL självstudie del 41