I SQL er LIKE operatør giver dig mulighed for at lave mønstertilpasning. Det bestemmer, om en specifik tegnstreng matcher et specificeret mønster.
Et mønster kan indeholde almindelige tegn og jokertegn.
Kildetabel
Følgende tabel bruges til eksemplerne på denne side.
SELECT * FROM Owners; Resultat:
+-----------+-------------+------------+----------------+-------------------+ | OwnerId | FirstName | LastName | Phone | Email | |-----------+-------------+------------+----------------+-------------------| | 1 | Homer | Connery | (308) 555-0100 | example@sqldat.com | | 2 | Bart | Pitt | (231) 465-3497 | example@sqldat.com | | 3 | Nancy | Simpson | (489) 591-0408 | NULL | | 4 | Boris | Trump | (349) 611-8908 | NULL | | 5 | Woody | Eastwood | (308) 555-0112 | example@sqldat.com | | 6 | Burt | Tyson | (309) 565-0112 | example@sqldat.com | +-----------+-------------+------------+----------------+-------------------+
Eksempel
Her er et eksempel for at demonstrere, hvordan LIKE operatør arbejder.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%.com'; Resultat:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Woody | Eastwood | example@sqldat.com | +-------------+------------+-------------------+
I dette eksempel brugte jeg LIKE operator sammen med % wildcard-operatør for at returnere ejere, hvis e-mailadresser ender på .com .
LIKE kan også bruges med andre strengoperatorer, såsom _ , [] og [^] .
% Wildcard-operatør
% wildcard-operator matcher enhver streng med nul eller flere tegn. Det kan bruges som enten et præfiks eller et suffiks, og det kan også bruges i midten af en streng.
Det plejer at være mere almindeligt brugt som et suffiks, og det har begrænset brug i midten af mønstre, selvom der er nogle gyldige use-cases for at bruge det i midten af et mønster, såsom følgende:
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE 'example@sqldat.com%.com'; Resultat:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | example@sqldat.com | +-------------+------------+------------------+
I dette tilfælde kendte vi ikke barts e-mailadresse, men vi vidste, at det startede med example@sqldat.com og endte med .com . Derfor var vi i stand til at bruge LIKE i forbindelse med % wildcard-operatør for at udfylde resten.
Husk på, at denne teknik kan returnere en masse irrelevante rækker, afhængigt af dataene, og hvordan du konstruerer din SQL-sætning.
__ Wildcard-operatør
Understregningen (__ ) wildcard-operator matcher ethvert enkelt tegn.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE 'b_rt'; Resultat:
+-------------+------------+------------------+ | FirstName | LastName | Email | |-------------+------------+------------------| | Bart | Pitt | example@sqldat.com | | Burt | Tyson | example@sqldat.com | +-------------+------------+------------------+
[] Wildcard-operatør
Klammerne ([] ) jokertegnsoperator matcher ethvert enkelt tegn inden for det angivne interval eller sæt, der er angivet mellem parenteserne.
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[bh]%'; Resultat:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Boris | Trump | NULL | | Burt | Tyson | example@sqldat.com | +-------------+------------+-------------------+
Her kombinerede jeg jokertegnet med parenteser med procenttegnet for at returnere alle ejere, hvis fornavn starter med enten b eller h .
Bemærk, at operatøren af parenteser ikke har udbredt anvendelse i DBMS'er. Det understøttes i SQL Server, men det understøttes ikke i MySQL, Oracle, DB2 og SQLite. Tjek din DBMS-dokumentation for at se, om den understøtter denne operatør.
[^] Wildcard-operatør
Caret-tegnet (^ ) kan bruges til at negere resultaterne, når du bruger parentes-operatoren.
Så vi ændrer det forrige eksempel til kun at returnere de ejere, hvis fornavn ikke gør start med b eller h .
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE FirstName LIKE '[^bh]%'; Resultat:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Nancy | Simpson | NULL | | Woody | Eastwood | example@sqldat.com | +-------------+------------+-------------------+
NULL-værdier
Procentdelen (% ) jokertegn matcher alt – næsten. En ting, den ikke matcher, er NULL .
SELECT
FirstName,
LastName,
Email
FROM Owners
WHERE Email LIKE '%'; Resultat:
+-------------+------------+-------------------+ | FirstName | LastName | Email | |-------------+------------+-------------------| | Homer | Connery | example@sqldat.com | | Bart | Pitt | example@sqldat.com | | Woody | Eastwood | example@sqldat.com | | Burt | Tyson | example@sqldat.com | +-------------+------------+-------------------+
I vores tabel er der to rækker med NULL i E-mail kolonne, men de returneres ikke her.
Ydeevne
Forespørgsler, der indeholder LIKE operatør kan køre meget langsommere end andre forespørgsler, og du bør nok undgå at bruge LIKE operatør, medmindre du virkelig har brug for det. Brug af % operator som præfiks kan være særlig langsom.
Dermed ikke sagt, at du slet ikke skal bruge det. LIKE operator er en integreret del af SQL, og du vil støde på mange scenarier, hvor det vil være den eneste mulighed (eller i det mindste den bedste mulighed).